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.
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.
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.
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 zatwierdzaniagit 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łęzigit 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.
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 ... ^^
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
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
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