Как вернуться к последней фиксации после проверки предыдущей фиксации?

Я иногда проверяю предыдущую версию кода для проверки или тестирования. Я видел инструкции о том, что делать, если я хочу изменить предыдущие коммиты, но не делаю никаких изменений. После того, как я это сделал. git checkout HEAD^, как мне вернуться к кончику ветки?.. git log больше не показывает мне SHA последней фиксации.

Ответ 1

Если вы знаете, что фиксация, которую вы хотите вернуть, является главой какой-либо ветки или помечена тегом, вы можете просто

git checkout branchname

Вы также можете использовать git reflog, чтобы узнать, что еще зафиксировал ваш HEAD (или любой другой ref) в прошлом.


Отредактировано для добавления:

В новых версиях Git, если вы только запускали git checkout или что-то еще, чтобы переместить ваш HEAD один раз, вы также можете сделать

git checkout -

чтобы переключиться обратно туда, где было до последней проверки. Это было вызвано аналогией с идиомой оболочки cd -, чтобы вернуться к тому рабочему каталогу, в котором он был ранее.

Ответ 2

git мастер проверки

master - это подсказка или последняя фиксация. gitk покажет вам, где вы находитесь на дереве в то время. git reflog покажет все коммиты, но в этом случае вам просто нужен совет, поэтому git мастер проверки.

Ответ 3

Наткнулся на этот вопрос только сейчас и есть что добавить

Чтобы перейти на самый последний коммит:

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

Объяснение:

git log --branches показывает журнал git log --branches из всех локальных веток
-1 ограничение до одного коммита → последний коммит
--pretty=format:"%H" для отображения только хэша коммита
git checkout $(...) использовать вывод subshell в качестве аргумента для checkout

Замечания:

Это приведет к отделению головы (потому что мы обращаемся непосредственно к коммиту). Этого можно избежать, извлекая имя ветки с помощью sed, как описано ниже.


Чтобы перейти на ветку самого последнего коммита:

git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')

Объяснение:

git log --branches показывает журнал git log --branches из всех локальных веток
-1 ограничение до одного коммита → последний коммит
--pretty=format:"%D" для отображения только имен ссылок
| sed 's/.*,//g' | sed 's/.*,//g' игнорирует все, кроме последнего из нескольких ссылок (*)
git checkout $(...) использовать вывод subshell в качестве аргумента для checkout

*) HEAD и удаленные ветки отображаются первыми, локальные ветки располагаются последними в алфавитном порядке по убыванию, поэтому оставшиеся ветки будут называться в алфавитном порядке по имени первой ветки.

Замечания:

Это всегда будет использовать (в алфавитном порядке) имя первой ветки, если есть несколько для этого коммита.


В любом случае, я думаю, что лучшим решением было бы просто отобразить имена ссылок для самого последнего коммита, чтобы знать, где оформить заказ:

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

Например, создайте псевдоним git top для этой команды.

Ответ 4

Посмотрите на графический графический интерфейс... gitk он отображает все фиксации. Иногда легче работать графическим... ^^

Ответ 5

Для этого можно использовать одну из следующих git:

git checkout master
git checkout branchname

Ответ 6

Если у вас есть ветка, отличная от главной, один простой способ - проверить эту ветку, а затем проверить главную. Вуаля, вы вернулись на кончик мастера. Там наверное умнее способов...

Ответ 7

git reflog //find the hash of the commit that you want to checkout
git checkout <commit number>>

Ответ 8

Если ваша последняя фиксация находится на главной ветке, вы можете просто использовать

git checkout master