Jak wrócić do najnowszej wersji w Git?

Niedawno przeniosłem się z SVN do Git i jestem trochę zdezorientowany. Musiałem uruchomić poprzednią wersję skryptu przez debugger, więc zrobiłem git checkout <previous version hash> i zrobiłem to, co musiałem.

Teraz chcę wrócić do najnowszej wersji, ale nie znam hasha do niej. Kiedy piszę git log, nie widzę tego. Jak mogę to zrobić? Czy jest też łatwiejszy sposób na zmianę wersji niż wpisywanie hashów - coś w stylu "wróć do dwóch wersji" lub " przejdź do najbardziej chronologicznie najnowsze"?
Author: Mateusz Piotrowski, 2010-08-24

9 answers

git checkout master powinno wystarczyć. Aby cofnąć się do dwóch wersji, można powiedzieć coś w stylu git checkout HEAD~2, ale lepiej utworzyć tymczasową gałąź opartą na tym czasie, więc git checkout -b temp_branch HEAD~2

 293
Author: Paul Betts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-24 17:17:29

Kiedy dokonujesz transakcji na konkretny commit, git tworzy oddzielną gałąź. Więc jeśli zadzwonisz:

$ git branch 

Zobaczysz coś w stylu:

* (detached from 3i4j25)
  master
  other_branch

Aby wrócić do master branch head, wystarczy ponownie przejść do master branch:

$ git checkout master

To polecenie automatycznie usunie oddzieloną gałąź.

Jeśli git checkout nie działa prawdopodobnie masz zmodyfikowane pliki sprzeczne między gałęziami. Aby zapobiec utracie kodu git wymaga od Ciebie pliki. Masz trzy opcje:

  1. Schowaj swoje modyfikacje (możesz je później wrzucić):

    $ git stash
    
  2. Odrzuć zmiany resetując gałąź odłączoną:

    $ git reset --hard
    
  3. Utwórz nową gałąź z poprzednimi modyfikacjami i zatwierdź je:

    $ git checkout -b my_new_branch
    $ git add my_file.ext
    $ git commit -m "My cool msg"
    

Po tym możesz wrócić do swojej gałęzi master (najnowsza wersja):

$ git checkout master
 37
Author: Thomio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-09 12:04:08

To mi pomogło (nadal byłem na gałęzi master):

Git reset --hard origin / master

 29
Author: averasko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-01 14:13:47

Dopiero zaczynam kopać głębiej w git, więc nie jestem pewien, czy dobrze rozumiem, ale myślę, że poprawną odpowiedzią na pytanie OP jest to, że możesz uruchomić git log --all ze specyfikacją formatu jak Ta: git log --all --pretty=format:'%h: %s %d'. Oznacza to aktualną wersję jako (HEAD) i możesz po prostu pobrać następną z listy.

BTW, dodaj taki alias do swojego .gitconfig z nieco lepszym formatem i możesz uruchomić git hist --all:

  hist = log --pretty=format:\"%h %ai | %s%d [%an]\" --graph

Jeśli chodzi o wersje względne, znalazłem to post , ale mówi tylko o starszych wersjach, prawdopodobnie nie ma co się odnosić do nowszych wersji.

 6
Author: haridsv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:27

Możesz sprawdzić używając nazw gałęzi, po pierwsze.

Wiem, że jest kilka sposobów na poruszanie głową, ale zostawię to ekspertowi Gita, aby je wyliczył.

Chciałem tylko zasugerować gitk --all -- uznałem to za niezmiernie pomocne, gdy zaczynałem od Gita.

 5
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-24 17:20:43

Aby powrócić do najnowszej wersji:

git checkout <branch-name> 

Na przykład, git checkout master lub git checkout dev

 3
Author: Reggie Pinkham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-10 19:35:08

Kiedy wrócisz do poprzedniej wersji,

$ git checkout HEAD~2
Previous HEAD position was 363a8d7... Fixed a bug #32

Możesz zobaczyć swój log funkcji(hash) za pomocą tego polecenia nawet w tej sytuacji;

$ git log master --oneline -5
4b5f9c2 Fixed a bug #34
9820632 Fixed a bug #33
...

master może być zastąpiona inną nazwą gałęzi.

Następnie zamów go, będziesz mógł wrócić do funkcji.

$ git checkout 4b5f9c2
HEAD is now at 4b5f9c2... Fixed a bug #34
 2
Author: kujiy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-10 01:13:53

Bardziej eleganckim i prostym rozwiązaniem jest użycie

git stash

Powróci do najbardziej wybrednej lokalnej wersji gałęzi, a także zapisze Twoje zmiany w stashu, więc jeśli chcesz cofnąć tę akcję zrób:

git stash apply
 0
Author: Ilya Gazman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-29 14:36:05

Czasami potrzebujesz trochę -f, jeśli git jest trudny. Ostrzeżenie, rób to tylko wtedy, gdy wiesz, czego się spodziewać.

git checkout <branch-name> -f

 -2
Author: visc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-23 13:42:45