Obtenha o hash curto da versão Git

382

Existe uma maneira mais limpa de obter o hash da versão curta HEADdo Git?

Quero ver a mesma saída que recebo de:

 git log -n 1 | head -n 1 | sed -e 's/^commit //' | head -c 8

Originalmente, usei o comando acima para gerar uma string de versão, mas isso é ainda melhor:

git describe --tags

Ele produzirá strings como 0.1.12(commit marcado) ou 0.1.11-5-g0c85fbc(cinco commits após a tag).

Attila O.
fonte
2
Como você parece ser bom em manipular dados com pipes e outros enfeites, você deve saber sobre aliases de git . Nesse caso, há um comando para o que você deseja (consulte as respostas), mas, eventualmente, você encontrará algo onde não existe, e os aliases são ótimos para isso.
precisa
@ MatrixFrog obrigado pela dica! Eu já tinha alguns aliases simples do Git, mas não sabia até que ponto eles podem ser poderosos até agora. Eu gosto especialmente da exibição graphviz.
Attila O.
11
Hã. Quando corro git describe --tags, recebo a mensagem "fatal: nenhum nome encontrado, não pode descrever nada". .
Quinn Comendant
@QuinnComendant Você provavelmente precisa marcar algo primeiro para --tagstrabalhar. Tente criar uma tag primeiro ; por exemplo git tag 1.0.0.
Attila O.
Possível duplicado de git obter hash curto a partir de hash regulares
Cristian Ciupitu

Respostas:

697

Tente o seguinte:

git rev-parse --short HEAD

O comando git rev-parsepode fazer um número notável de coisas diferentes; portanto, você precisará examinar a documentação com muito cuidado para descobrir isso.

Mark Longair
fonte
4
você pode fazer o inverso e obter o hash de confirmação longo do hash de confirmação curto, fazendo o seguinte #git rev-parse HEAD
Andy
9
O comando também trabalha com IDs de rotações longas que são copiadas e coladas de outras fontes como git log, por exemplo, git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18fretornos97dd2ae
chiborg
3
Apenas funciona com referências. Você pode usar HEAD, nomes de tags, nomes de ramificações ou hashes simples.
precisa
11
Atenção, isso retorna um hash de confirmação de 7 caracteres (por padrão), enquanto muitos lugares como o gitlab usam 8 caracteres!
Masterdilo #
3
Você pode usar git rev-parse --short=8 HEADpara obter o comprimento de 8 caracteres usado pelo GitLab. Você também pode definir core.abbreva 8 para um repositório específico git com um comando como git config core.abbrev 8 Fonte
n8felton
112

Você pode fazer praticamente qualquer formato que desejar --pretty=format:

git log -1 --pretty=format:%h 
Karl Bielefeldt
fonte
70
git log -1 --abbrev-commit

também fará isso.

git log --abbrev-commit

listará as entradas de log com a soma de verificação SHA-1 abreviada.

Sanjeev
fonte
11
O segundo é exatamente o que eu estava procurando! Muito simples de lembrar e útil na vida cotidiana.
IFreilicht 17/11/19
Também funciona com git log --pretty=oneline, que, ao contrário --oneline, imprime hashes em tamanho real.
sdaau
46

Uma maneira simples de ver a versão curta do Git commit e a mensagem de commit do Git é:

git log --oneline

Observe que isso é uma abreviação de

git log --pretty=oneline --abbrev-commit
Adaga de Gilbert Arenas
fonte
11
--oneline é a melhor opção
Juan Ignacio Barisich 23/07/19
11
@JuanIgnacioBarisich a melhor opção depende da quantidade de informações que você precisa visualizar. Caso seja necessário mais informações como autor ou data, o git log --abbrev-commit seria uma opção melhor. Também log --pretty pode ser uma melhor opção de escolher quais informações de log
velocidade de
35

Uma maneira realmente simples é:

git describe --always
Steven Shaw
fonte
11
ha, doce, que trata dos casos em que o git description falhará de outra forma (porque o descrevem espera uma tag em algum lugar da história) thx
interessado
8
Não é bom se você deseja estritamente o hash curto - pois isso pode retornar uma tag anotada, caso exista.
Zitrax
Em alguns casos, git describe --longpoderia ajudar. Dos documentos : "Sempre imprima o formato longo (a tag, o número de confirmações e o nome abreviado da confirmação), mesmo quando corresponder a uma tag ." [minha ênfase]
djvg
O uso --longé melhor, mas às vezes você obtém um hash curto e, às vezes, 3 itens separados por hífens. Hoje em dia, eu uso a resposta aceita. Naquela época, eu não sabia sobre tags anotadas - talvez elas nem existissem!
Steven Shaw
16

Ramificar com hash curto e último comentário:

git branch -v

  develop      717c2f9 [ahead 42] blabla
* master       2722bbe [ahead 1] bla
Fabrice
fonte
10

Eu tenho o Git versão 2.7.4 com as seguintes configurações:

git config --global log.abbrevcommit yes
git config --global core.abbrev 8

Agora quando eu faço:

git log --pretty=oneline

Recebo um ID de confirmação abreviado de oito dígitos:

ed054a38 add project based .gitignore
30a3fa4c add ez version
0a6e9015 add logic for shifting days
af4ab954 add n days ago
...
Down the Stream
fonte
11
Embora esse código possa responder à pergunta, fornecer um contexto adicional sobre como e por que resolve o problema melhoraria o valor a longo prazo da resposta.
precisa saber é o seguinte
11
Boa ideia. Obrigado, Sheryl
Down the Stream
1

e quanto a isso:

git log --pretty="%h %cD %cn %s"  

mostra algo como:

674cd0d qua, 20 nov 2019 12:15:38 +0000 mensagem de confirmação de Bob

veja a documentação bonita do formato, digite a descrição do link aqui

velocidade
fonte