Descubra qual confirmação está atualmente registrada no Git

157

Estou no meio de uma git bisectsessão.

Qual é o comando para descobrir em qual confirmação (hash SHA1) estou atualmente? git statusnão fornece isso.

Edit: Eu acho que ligar git loge olhar para a primeira entrada funciona?

Steven Lu
fonte

Respostas:

173

Você tem pelo menos 5 maneiras diferentes de visualizar a confirmação que você efetuou no check-out em sua cópia de trabalho durante uma git bisectsessão ( observe que as opções de 1 a 4 também funcionarão quando você não estiver fazendo uma divisão ):

  1. git show.
  2. git log -1.
  3. Promessa do Bash.
  4. git status.
  5. git bisect visualize.

Vou explicar cada opção em detalhes abaixo.

Opção 1: git show

Conforme explicado nesta resposta à pergunta geral de como determinar qual confirmação você fez check-out atualmente (não apenas durante git bisect), você pode usar git showcom a -sopção para suprimir a saída do patch:

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

Opção 2: git log -1

Você também pode simplesmente fazer git log -1para descobrir em qual commit você está atualmente.

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

Opção 3: prompt do Bash

No Git versão 1.8.3+ (ou era uma versão anterior?), Se você tiver o prompt do Bash configurado para mostrar a ramificação atual que você efetuou o check-out na sua cópia de trabalho, também mostrará a confirmação atual que você verificou durante uma sessão de corte transversal ou quando você estiver no estado "desanexado da CABEÇA". No exemplo abaixo, atualmente fiz c1abcdecheck-out:

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

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

Opção 4: status do git

Além disso, a partir da versão 1.8.3+ do Git (e possivelmente anterior, novamente, não tenho certeza), a execução git statustambém mostrará o que você fez o check-out durante uma bissecção e quando você está no estado HEAD desanexado:

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

Opção 5: git bisect visualize

Por fim, enquanto você faz um git bisect, você também pode simplesmente usar git bisect visualizeou seu alias interno git bisect viewpara iniciar gitk, para que você possa visualizar graficamente em qual commit você está, bem como quais commits você marcou como ruim e bom até agora. Tenho certeza de que isso existia bem antes da versão 1.8.3, mas não sei em qual versão ela foi introduzida:

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

insira a descrição da imagem aqui

Comunidade
fonte
Arrumado. Quando fiz a pergunta, não estava no Git 1.8 e, desde então, recebi um prompt do zsh que mostra o hash de confirmação, acho que ele pode até mostrar um indicador especial especificamente para se eu estou cortando o bíceps, mas não tenho ' Na verdade, não fiz mais divisão desde o momento em que fiz essa pergunta, principalmente git log -p -S <search>o trabalho.
9183 Steven Lu Lu
git statusnão mostra o ID de confirmação, a menos que você esteja no estado desanexado. caso contrário, ele diz "Em qualquer ramo ". git showfunciona embora
Kip
88

Você pode apenas fazer:

git rev-parse HEAD

Para explicar um pouco mais: git rev-parseé o comando básico do git para interpretar qualquer uma das maneiras exóticas em que você pode especificar o nome de um commit e HEADé uma referência ao seu commit ou branch atual. (Em uma git bisectsessão, ele aponta diretamente para uma confirmação ("HEAD desanexado") em vez de uma ramificação.)

Como alternativa (e mais fácil de lembrar) seria apenas fazer:

git show

... cujo padrão é mostrar o commit que HEADaponta para. Para uma versão mais concisa, você pode fazer:

$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation
Mark Longair
fonte
3
Se você deseja obter o hash para uso em outro lugar, git rev-parse HEADnão requer processamento versus todas as alternativas de lixo.
Nick T
17
$ git rev-parse HEAD
273cf91b4057366a560b9ddcee8fe58d4c21e6cb

Atualizar:

Como alternativa (se você tiver tags):

(Bom para nomear uma versão, não muito bom para retornar ao git.)

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

Ou (como Mark sugeriu, listando aqui a integridade):

$ git show --oneline -s
c0235b7 Autorotate imagens carregadas com base na orientação EXIF
Alexander Gladysh
fonte
7
Você pediu um SHA1, não algo fácil de lembrar. ;-)
Alexander Gladysh
Este versione é muito útil se você quiser fazer alguma verificação em um script
Daniele Licitra
13

Se você deseja extrair apenas uma informação simples, pode obtê-lo usando git showa --format=<string>opção ... e pedir para não fornecer a diferença --no-patch. Isso significa que você pode obter uma saída no estilo printf do que você quiser, que geralmente pode ser um único campo.

Por exemplo, para obter apenas o hash reduzido ( %h), você pode dizer:

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

Se você deseja salvá-lo em uma variável de ambiente no bash (o que provavelmente as pessoas querem fazer), use a $()sintaxe :

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

$ echo $GIT_COMMIT
4b703eb

A listagit show --help completa do que você pode fazer está em . Mas aqui está uma lista abreviada de propriedades que podem ser úteis:

  • %H cometer hash
  • %h hash de confirmação abreviado
  • %T hash da árvore
  • %t hash abreviado da árvore
  • %P hashes dos pais
  • %p hashes principais abreviados
  • %an nome do autor
  • %ae email do autor
  • %at data do autor, carimbo de data e hora do UNIX
  • %aI data do autor, formato estrito ISO 8601
  • %cn nome do committer
  • %ce email do autor
  • %ct data de confirmação, carimbo de data e hora do UNIX
  • %cI data do emissor, formato estrito ISO 8601
  • %s sujeito
  • %f assunto higienizado, adequado para um nome de arquivo
  • %gD seletor de reflog, por exemplo, refs / stash @ {1}
  • %gd seletor de reflog reduzido, por exemplo, stash @ {1}
HostileFork diz que não confia no SE
fonte
Todas essas opções de formatação, mas shownão tem nada para ramificar .
BVJ
2

Use git show, que também mostra a mensagem de confirmação e o padrão é o commit atual quando não há argumentos.

asmeurer
fonte