2010-03-11 3 views
302

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

+3

Что касается 'мерзавца log' предложения вашего вопроса, вы всегда можете запустить 'git log -all' (или более полезно,' git log -oneline -graph -all'). – Wildcard

ответ

385

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

git checkout branchname 

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


Edited добавить:

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

git checkout - 

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

+15

. Я хотел бы упомянуть, что типичным примером будет «git checkout master». Одна из трудностей, с которыми я училась использовать git, - это не знать, какие конкретные ключевые слова (например, «мастер») я могу фактически заменить на слова заполнителя, такие как «branchname». – AbePralle

+3

'master' на самом деле не является ключевым словом, так как' HEAD'. Это просто имя ветки по умолчанию в новом репозитории. Вы можете запустить 'git branch' для получения списка ветвей в вашем репозитории и' git tag -l' для списка тегов. Аналогичным образом, «origin» является именем по умолчанию удаленного, с которого клонируется репозиторий, но в нем нет ничего особенного. – Novelocrat

+3

Если было непонятно, 'git reflog' предоставляет вам список хешей, после чего вы можете использовать' git checkout [commit-hash] '. – jbnunn

6

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

+0

Да, это на самом деле то, как я это делал в прошлом, но у меня нет графического интерфейса, доступного в данный момент. –

19

мерзавец фотографии мастер

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

+0

gitk --all показывает все коммиты. – Kharoof

11

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

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

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

Объяснение:

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

Примечание:

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


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

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

Объяснение:

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

Примечание:

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


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

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

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

3

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

git checkout master 
git checkout branchname 
-2

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

git checkout master 
+1

Добро пожаловать в SO. Не рекомендуется размещать ответы, которые уже были отправлены. Это решение уже упоминалось несколько раз. – AChampion

Смежные вопросы