Jak wrócić do ostatniego commita po sprawdzeniu poprzedniego commita?

Czasami sprawdzam jakąś poprzednią wersję kodu, aby sprawdzić lub przetestować. Widziałem instrukcje, co zrobić, jeśli chcę zmodyfikować poprzednie commity - ale załóżmy, że nie wprowadzę żadnych zmian. Po zrobieniu np. git checkout HEAD^, Jak mam wrócić do wierzchołka gałęzi?.. git log nie pokazuje mi już SHA ostatniego commita.

Author: Phil Miller, 2010-03-11

6 answers

Jeśli wiesz, że commit, do którego chcesz powrócić jest głową jakiejś gałęzi lub jest oznaczony, możesz po prostu

git checkout branchname

Możesz również użyć git reflog, aby zobaczyć, na jakie inne commity wskazywała twoja głowa (lub jakikolwiek inny ref) w przeszłości.


Edited to add:

W nowszych wersjach Git, jeśli tylko raz uruchomiłeś git checkout lub coś innego, aby przenieść HEAD, Możesz również wykonać

git checkout -

Aby przełączyć się z powrotem na miejsce przed ostatnią kasą. Było to motywowane analogia do idiomu powłoki cd -, aby wrócić do dowolnego katalogu roboczego, w którym był wcześniej.

 436
Author: Phil Miller,
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-05-29 15:14:20

Git checkout master

Master jest końcówką lub ostatnim commitem. gitk pokaże Ci tylko, gdzie jesteś w drzewie w tym czasie. git reflog pokaże wszystkie commity, ale w tym przypadku potrzebujesz tylko podpowiedzi, więc Git checkOut master.

 21
Author: Bruce Wells,
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
2014-09-26 00:26:35

Natknąłem się właśnie na to pytanie i mam coś do dodania

Aby przejść do najnowszego commita:

git checkout $(git log --branches -1 --pretty=format:"%H")

Explanation:

git log --branches pokazuje log commitów ze wszystkich lokalnych gałęzi
-1 ograniczenie do jednego commita → najnowszy commit
--pretty=format:"%H" formatowanie, aby pokazywać tylko hash zatwierdzania
git checkout $(...) użyj wyjścia subshell jako argumentu dla checkout

Uwaga:

Spowoduje to jednak oderwanie głowy (ponieważ bezpośrednio do commita). Można tego uniknąć poprzez wyodrębnienie nazwy gałęzi za pomocą sed, wyjaśnione poniżej.


Aby przejść do gałęzi najnowszego commita:

git checkout $(git log --branches -1 --pretty=format:'%D' |sed 's/HEAD -> \|tag: [^,]*\|,.*//g')

Explanation:

git log --branches pokazuje log commitów ze wszystkich lokalnych gałęzi
-1 ograniczenie do jednego commita → najnowszy commit
--pretty=format:"%D" formatowanie wyświetlania tylko nazw ref
|sed 's/HEAD -> \|tag: [^,]*\|,.*//g' ignoruj nagłówek, Oznacz i wyodrębnij pierwszą z wielu nazw gałęzi
git checkout $(...) użyj wyjścia subshell jako argument dla checkout

Uwaga:

To zawsze użyje pierwszej nazwy gałęzi, jeśli dla tego commita jest ich wiele.


W każdym razie, myślę, że najlepszym rozwiązaniem byłoby po prostu wyświetlenie nazw ref dla najnowszego commit wiedzieć, gdzie do kasy:

git log --branches -1 --pretty=format:'%D'

Np. utwórz alias git top dla tego polecenia.

 13
Author: 816-8055,
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-10-28 14:18:51

Spójrz na Graficzny GUI ... gitk pokazuje wszystkie commity. Czasami łatwiej jest pracować graficznie ... ^^

 6
Author: tanascius,
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
2014-05-17 17:33:40

Możesz użyć jednej z następujących komend git:

git checkout master
git checkout branchname
 5
Author: hothead1000,
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-01-15 10:13:36

Jeśli twój najnowszy commit znajduje się w gałęzi master, możesz po prostu użyć

git checkout master
 -3
Author: Jackie Xu,
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-07-06 04:38:47