Найти, какой коммит в настоящее время проверен в Git

158

Я нахожусь в середине git bisectсеанса.

Какая команда, чтобы узнать, какой коммит (хэш SHA1) я в данный момент? git statusне обеспечивает это.

Редактировать: я думаю, что звонить git logи смотреть на первую запись работает?

Стивен Лу
источник

Ответы:

174

У вас есть как минимум 5 различных способов просмотра коммита, который вы в настоящее время извлекли в свою рабочую копию во время git bisectсеанса ( обратите внимание, что варианты 1-4 также будут работать, когда вы не делите пополам ):

  1. git show,
  2. git log -1,
  3. Bash подскажите.
  4. git status,
  5. git bisect visualize,

Я объясню каждый вариант подробно ниже.

Вариант 1: мерзавец

Как объясняется в этом ответе на общий вопрос о том, как определить, какой коммит вы в данный момент извлекли (не только во время git bisect), вы можете использовать git showс -sопцией, чтобы подавить вывод патча:

$ git show --oneline -s
a9874fd Merge branch 'epic-feature'

Вариант 2: git log -1

Вы также можете просто git log -1узнать, на каком коммите вы сейчас находитесь.

$ git log -1 --oneline
c1abcde Add feature-003

Вариант 3: приглашение Bash

В Git версии 1.8.3+ (или это была более ранняя версия?), Если у вас есть приглашение Bash, настроенное для отображения текущей ветки, которую вы извлекли, в вашей рабочей копии, тогда оно также покажет вам текущий зафиксированный вами коммит. во время сеанса деления пополам или когда вы находитесь в состоянии «отсоединенная ГОЛОВА». В приведенном ниже примере я в настоящее время c1abcdeпроверил:

# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $

# Prompt at detached HEAD state 
user ~ (c1abcde...) $

Вариант 4: состояние git

Также в Git версии 1.8.3+ (и, возможно, ранее, опять же не уверен), запуск git statusтакже покажет вам, какой коммит вы извлекли во время деления и когда вы находитесь в отсоединенном состоянии HEAD:

$ git status
# HEAD detached at c1abcde <== RIGHT HERE

Вариант 5: визуализация git bisect

Наконец, пока вы делаете git bisect, вы также можете просто использовать git bisect visualizeили его встроенный псевдоним git bisect viewдля запуска gitk, чтобы вы могли графически просматривать, какой коммит вы используете, а также, какие коммиты вы пометили как плохие и хорошие на данный момент. Я уверен, что это существовало задолго до версии 1.8.3, я просто не уверен, в какой версии это было представлено:

git bisect visualize 
git bisect view # shorter, means same thing

введите описание изображения здесь

Сообщество
источник
Ухоженная. Когда я задал вопрос, я не был на Git 1.8, и с тех пор я получил zsh-правую подсказку, которая показывает хеш коммита, я думаю, что он может даже показать специальный индикатор специально для того, если я делю пополам, но у меня нет с тех пор, как я задал этот вопрос, я больше git log -p -S <search>не делаю пополам, в основном это работа.
Стивен Лу
git statusне показывает идентификатор фиксации, если вы не находитесь в отключенном состоянии. в противном случае написано "На ветке все что угодно " git showхотя работает
Кип
88

Вы можете просто сделать:

git rev-parse HEAD

Чтобы объяснить немного подробнее: git rev-parseэто основная команда git для интерпретации любого экзотического способа, которым вы можете указать имя коммита, и HEADявляется ссылкой на ваш текущий коммит или ветвь. (В git bisectсеансе он указывает непосредственно на коммит («отсоединенный HEAD»), а не на ветвь.)

В качестве альтернативы (и легче запомнить) было бы просто сделать:

git show

... по умолчанию показывает коммит, на который HEADуказывает. Для более краткой версии вы можете сделать:

$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation
Марк Лонгэйр
источник
3
Если вы хотите просто получить хеш для использования в другом месте, не git rev-parse HEADтребует обработки против всех альтернатив мусора.
Ник Т
17
$ git rev-parse HEAD
273cf91b4057366a560b9ddcee8fe58d4c21e6cb

Обновить:

В качестве альтернативы (если у вас есть теги):

(Хорошо подходит для обозначения версии, но не очень хорошо для возврата к git.)

$ git description
v0.1.49-локальный-AG-1-g273cf91

Или (как предложил Марк, перечислив здесь для полноты):

$ git show --oneline -s
c0235b7 Автоматически загружать загруженные изображения на основе ориентации EXIF
Александр Гладыш
источник
7
Вы просили SHA1, а не то, что легко запомнить. ;-)
Александр Гладыш
Эта версия очень полезна, если вы хотите выполнить некоторую проверку в сценарии
Даниэле Лицитра
13

Если вы хотите извлечь только простой кусок информации, вы можете получить , что при использовании git showс --format=<string>опцией ... и попросить его , чтобы не дать вам различия с --no-patch. Это означает, что вы можете получить вывод в стиле printf того, что вы хотите, что часто может быть одним полем.

Например, чтобы получить только сокращенный хеш ( %h), вы можете сказать:

$ git show --format="%h" --no-patch
4b703eb

Если вы хотите сохранить это в переменной окружения в bash (вероятно, люди захотят это сделать), вы можете использовать $()синтаксис :

$ GIT_COMMIT="$(git show --format="%h" --no-patch)"

$ echo $GIT_COMMIT
4b703eb

Полный список того, что вы можете сделать, находится вgit show --help . Но вот сокращенный список свойств, которые могут быть полезны:

  • %H совершить хэш
  • %h сокращенный коммит хеш
  • %T хэш дерева
  • %t сокращенный хэш дерева
  • %P родительские хеши
  • %p сокращенные родительские хеши
  • %an имя автора
  • %ae электронная почта автора
  • %at дата автора, метка времени UNIX
  • %aI дата автора, строгий формат ISO 8601
  • %cn имя коммиттера
  • %ce электронная почта коммиттера
  • %ct дата принятия, отметка времени UNIX
  • %cI дата коммиттера, строгий формат ISO 8601
  • %s тема
  • %f очищенная строка темы, подходящая для имени файла
  • %gD Селектор reflog, например, refs / stash @ {1}
  • %gd сокращенный селектор reflog, например, stash @ {1}
HostileFork говорит, что не доверяйте SE
источник
Все эти параметры форматирования, но не showимеет ничего для ветки .
bvj
2

Use git show, который также показывает вам сообщение о коммите и по умолчанию принимает текущий коммит, если ему не предоставлено никаких аргументов.

asmeurer
источник