Как получить хэши новых коммитов, чем текущий в 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> это ветка, над которой вы работали.

Другие вопросы по тегам