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

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

Какую команду вы узнаете, какую фиксацию (SHA1 хэш) я сейчас нахожу? git status не предоставляет этого.

Изменить: я предполагаю, что вызывается git log и смотрит на первую запись?

Ответ 1

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

  • git show.
  • git log -1.
  • Bash.
  • git status.
  • git bisect visualize.

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

Вариант 1: git показать

Как объяснено в этом ответе на общий вопрос о том, как определить, какая фиксация у вас есть в настоящее время (не только во время 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 prompt

В git версии 1.8.3+ (или это была более ранняя версия?), если у вас есть приглашение Bash, настроенное для отображения текущей ветки, которую вы проверили в своей рабочей копии, тогда она также покажет вы текущая фиксация, которую вы проверили во время сеанса bisect или когда вы находитесь в состоянии "отсоединенного HEAD". В приведенном ниже примере я в настоящее время проверил 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

enter image description here

Ответ 2

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

git rev-parse HEAD

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

Альтернативно (и проще запомнить) было бы просто:

git show

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

$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation

Ответ 3

$ git rev-parse HEAD
273cf91b4057366a560b9ddcee8fe58d4c21e6cb

Update:

Альтернативно (если у вас есть теги):

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

$ git describe
v0.1.49-localhost-ag-1-g273cf91

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

$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation

Ответ 4

Если вы хотите извлечь только простую часть информации, вы можете получить это, используя git show с опцией --format=<string>... и попросите ее не давать вам diff с --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 commit hash
  • %h сокращенный хеш фиксации
  • %T хэш дерева
  • %T сокращенный хэш дерева
  • %P родительские хеши
  • %P сокращенные родительские хэши
  • %an имя автора
  • %ae адрес электронной почты автора
  • %at дата автора, отметка времени UNIX
  • %aI дата автора, строгий формат ISO 8601
  • %cn имя коммиттера
  • %ce committer email
  • %ct дата коммиттера, отметка времени UNIX
  • %cI дата коммиттера, строгий формат ISO 8601
  • %s тема
  • %f дезинфицированная строка темы, подходящая для имени файла
  • %gD селектор reflog, например, refs/stash @{1}
  • %gD сокращенный селектор reflog, например, stash @{1}

Ответ 5

Используйте git show, в котором также отображается сообщение о фиксации, и по умолчанию используется текущий коммит при отсутствии аргументов.