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).


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.

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.


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 

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.


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

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

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

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
...

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.