it-swarm.com.ru

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

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

367
Leo Alekseyev

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

git checkout branchname

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


Отредактировано, чтобы добавить:

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

git checkout -

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

477
Phil Miller

Git Checkout Master

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

22
Bruce Wells

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

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

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

Объяснение:

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

Заметка:

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


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

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

Объяснение:

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

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

Заметка:

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


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

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

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

16
816-8055

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

9
tanascius

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

git checkout master
git checkout branchname
6
hothead1000

показать все ветки и зафиксировать 
git log - ветви --oneline

показать последний коммит 
git log - филиалы -1 --oneline

показать перед последним коммитом 
git log - филиалы -2 --oneline

0
abdesselam

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

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