Я иногда проверяю предыдущую версию кода для проверки или тестирования. Я видел инструкции о том, что делать, если я хочу изменить предыдущие коммиты, но не делаю никаких изменений. После того, как я это сделал. 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