2017-02-07 9 views
6

Robiłem mój projekt, podczas gdy w pewnym momencie odkryłem, że jedno przestało działać. Musiałem sprawdzić stan mojego kodu, kiedy działał poprawnie, więc zdecydowałem się na skorzystanie z git-checkout (ponieważ chciałem coś sprawdzić). I tak zrobiłemGit checkout - przejście z powrotem na HEAD

git checkout SHA 

kilka razy, podczas gdy wracając do punktu, z którego nie mogę iść do głowy, wyjście jest następujące:

git checkout SHA-HEAD 

error: Your local changes to the following files would be overwritten by checkout: 
    [list of files] 
Please, commit your changes or stash them before you can switch branches. 
Aborting 

Jestem prawie pewien, że nie ma zmienił wszystko. Polecenie

-
git checkout master 

daje takie same wyniki.

Czy istnieje sposób, aby wrócić do głowy?

Jaki jest bezpieczny sposób „przeskakując” historia zobowiązuje?

+0

Jeśli nie chcesz, aby te zmiany 'git czysty -f' wyczyści wszystkie nieśledzone plików. Następnie sprawdź na master – gmuraleekrishna

+0

Komunikat 'error: ...' oznacza, że ​​ty - lub coś, co zrobiłeś, być może pośrednio - * zmieniłeś * pliki. Możesz powiedzieć Gitowi, aby odrzucił lub nadpisał te zmiany, lub użyj 'git status' i/lub' git diff', aby zobaczyć, co dokładnie się zmieniło. Może to być tak proste jak jakaś kończąca linię modyfikacja lub jakieś polecenie działające w tle, które zapisało do pliku. (Na marginesie: "wróć do HEAD" nie ma sensu w Git, jak zawsze * zawsze * na HEAD: "HEAD" dosłownie oznacza "current commit." Możesz * zmienić * HEAD, po którym nadal jesteś na HEAD , tylko inna HEAD. To jest ... trudne do wyrażenia. :-)) – torek

+1

Git jest załadowany mechanizmami, więc tutaj są dwa: 'git reset --hard HEAD' oznacza" zresetować indeks i drzewo pracy do dopasowania HEAD ", tj. Wyrzuca zmiany. Lub: 'git checkout -f master' oznacza" zmień HEAD na "master", nawet jeśli oznacza to wyrzucenie trochę pracy ":" -f "oznacza" force ". – torek

Odpowiedz

11

Możesz stash (zapisać zmiany w polu tymczasowym), a następnie z powrotem do master Gałąź HEAD.

$ git add . 
$ git stash 
$ git checkout master 

przeskoczyć zobowiązuje iz powrotem:

  • Idź do konkretnego commit-sha.

    $ git checkout <commit-sha> 
    
  • Jeśli masz niezatwierdzone zmiany tu wtedy można kasie nowy oddział, dodawać Commit, Push bieżące oddział pilocie.

    # checkout a new branch, add, commit, push 
    $ git checkout -b <branch-name> 
    $ git add . 
    $ git commit -m 'Changes in the commit' 
    $ git push origin HEAD  # push the current branch to remote 
    
    $ git checkout master   # back to master branch now 
    
  • Jeśli masz zmiany w konkretnym popełnić i nie chcesz, aby zachować zmiany, można zrobić stash lub reset wtedy kasy na master (lub jakiegokolwiek innego oddziału).

    # stash 
    $ git add -A 
    $ git stash 
    $ git checkout master 
    
    # reset 
    $ git reset --hard HEAD 
    $ git checkout master 
    
  • Po sprawdzeniu specyficzny popełnić jeśli nie masz niezakończonej zmianę czasu, tylko z powrotem do master lub other gałęzi.

    $ git status   # see the changes 
    $ git checkout master 
    
    # or, shortcut 
    $ git checkout -  # back to the previous state 
    
+0

To rozwiązało mój problem - częściowo. Nadal muszę wiedzieć, jak przeskakiwać w przód iw tył bez konsekwencji. – asdfgh

+1

@rbraun, Edytowałem swoją odpowiedź pokazującą, jak można przeskakiwać w przód iw tył. –