Как получить хэши новых коммитов, чем текущий в git?
В git
я использовал gitk
чтобы увидеть хеш коммита, который был сделан несколько недель назад, и я использовал git checkout с этим хешем, чтобы перевести мои исходные файлы в предыдущее состояние.
Теперь я хочу перейти к коммиту, который будет несколько дней спустя, однако gitk
показывает только коммиты до текущего, а не более поздние.
С помощью git log
также показывает только до текущего.
Как я могу перечислить последующие коммиты?
3 ответа
Является ли коммит, который вы хотите оформить, родом из какого-либо из ваших филиалов? Другими словами, включает ли какая-либо из ваших текущих веток изменения, сделанные в коммите, который вы ищете?
Если так, git log --all
покажет этот коммит в журнале. Добавление --oneline
и / или --decorate
Флаги могут облегчить поиск этих выходных данных, если все, что вам нужно, это сообщение о коммите:
$ git log --all --oneline --decorate
Если ваш коммит не входит в происхождение какой-либо из ваших веток (и поэтому не показан с log --all
), то вы должны искать git reflog
, Reflog - это история всех коммитов, которые ваш HEAD
указал на. HEAD
указывает на коммит, когда у вас есть эти файлы, извлеченные в данный момент в вашем рабочем каталоге.
Формат рефлога
hash HEAD@{n}: command: message
куда command
команда выдана для указания HEAD
в это конкретное место, и message
это сообщение, связанное с этой командой. За commit
с message
это сообщение о фиксации, которое вы ввели.
Из-за этого очень хорошо структурированного формата мы можем использовать grep, чтобы сделать вывод более легким для чтения. Например, если вы знаете, что недавно извлекли коммит, о котором идет речь, вы можете выполнить:
$ git reflog | grep checkout
Или только для просмотра коммитов вы можете запустить:
$ git reflog | grep commit
Вы также можете использовать grep многими другими способами в зависимости от того, что вы ищете:
$ git reflog | grep "phrase in commit message" --ignore-case
$ git reflog | grep "individual\|words\|in\|message" --ignore-case
Ты можешь использовать git reflog
чтобы увидеть хеш всех коммитов, которые посещал ваш указатель HEAD, то есть все коммиты, на которые вы когда-либо указывали в вашем рабочем каталоге.
Если вы не можете получить коммит, который ищете git log
это означает, что коммит, который вы ищете, не является предком коммита, в который вы в настоящее время помещены. Если вы не можете найти свой коммит в reflog, вы можете найти коммит, который был (прямо или косвенно) основан на нем. Если вы найдете его, извлеките его, и коммит, который вы ищете, теперь должен быть указан в git log
,
Ты можешь использовать
git log --all --oneline --graph --decorate
визуализировать ваше дерево мерзавца. Вы сейчас в отстраненном состоянии; вернуться туда, где вы были раньше; вам нужно использовать:
git checkout <branch-name>
где <branch-name>
это ветка, над которой вы работали.