Dado um nome de branch local / remoto, como posso obter o hash do commit para o qual este branch aponta?
88
O comando git rev-parse
é seu amigo, por exemplo:
$ git rev-parse development
17f2303133734f4b9a9aacfe52209e04ec11aff4
... ou para uma filial de rastreamento remoto:
$ git rev-parse origin/master
da1ec1472c108f52d4256049fe1f674af69e785d
Esse comando geralmente é muito útil, pois pode analisar qualquer uma das maneiras de especificar nomes de ramificações em git
, como:
git rev-parse master~3
git rev-parse HEAD@{2.days.ago}
... etc.
foo
, você pode fazer:git log --pretty=format:'%H'
def BranchHash = sh "git rev-parse ${BRANCH-NAME}
eu estou ficando:fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
. o que está errado?Os hashes são armazenados em
.git/refs/
, por exemplo.git/refs/heads/master
Mas use programaticamente
git rev-parse
conforme sugerido por Mark Longair, pois é mais seguro.fonte
Não se esqueça de que desde o Git 2.19 (2º trimestre de 2018), o Git prepara uma transição de hashes SHA1 para SHA2: consulte " Por que o Git não usa um SHA mais moderno? "
Com o Git 2.25 (Q1 2020),
git rev-parse
evolui e reflete esse possível novo hash.Veja cometer fa26d5e , cometer cf02be8 , cometer 38ee26b , cometer 37ab8eb , cometer 0370b35 , cometer 0253e12 , cometer 45e2ef2 , cometer 79b0edc , cometer 840624f , cometer 32a6707 , cometer 440bf91 , cometer 0b408ca , cometer 2eabd38 (28 de outubro de 2019), e comprometer 1bcef51 , cometer ecde49b (05 out. 2019) por brian m. Carlson (
bk2204
) .(Fundido por Junio C Hamano -
gitster
- no commit 28014c1, 10 de novembro de 2019)A
git rev-parse
documentação agora inclui:Com Git 2.29 (Q4 2020), você pode ter certeza de qual formato você deve usar para ler o hash commit de um branch (ou qualquer outro objeto).
Veja cometer e023ff0 , cometer 4feb562 , cometer 8a06d56 , cometer c49fe07 , cometer 02a32db , cometer ceaa4b3 , cometer eff45da , cometer b5b46d7 , cometer c5aecfc , cometer e74b606 , cometer 439d3a1 , cometer 6c2adf8 , cometer de5737c , cometer e0a646e , cometer 6ff6a67 , cometer 831279d , cometer b6e5005 , commit 287bb3a , commit 22f1824 , commit db00af9 ,comprometer 7187eb1 , cometer 98de0b2 , cometer a5587b8 , cometer 66b6d43 , cometer 2197f87 , cometer c0b65ea , cometer d62607d , cometer d482c23 , cometer 866be6e , cometer 4bacb6d , cometer 252a4ee , cometer 368f3cb , cometer abe3db1 , cometer 08fbc5d , cometer 11b6961 , cometer 9e3bd8a , cometer d827bce , commit 094a685 (29 jul 2020) por brian m. Carlson (
bk2204
) .Vejocommit 800e6a7 (29 de julho de 2020) por Johannes Schindelin (
dscho
) .(Fundido por Junio C Hamano -
gitster
- no commit e0ad957 , 11 de agosto de 2020)git config
agora inclui em sua página de manual :Para ficar claro, com Git 2.29 (quarto trimestre de 2020), a recente adição de suporte SHA-256 é marcada como experimental na documentação.
Veja o commit ff233d8 (16 de agosto de 2020) de Martin Ågren (
none
) .(Fundido por Junio C Hamano -
gitster
- no commit d1ff741 , 24 de agosto de 2020)git
agora inclui em sua página de manual :object-format-disclaimer
agora inclui em sua página de manual :O mesmo Git 2.29 (Q4 2020) garante que "
git clone
" ( man ) funcionará quando alguém clona do repositório SHA-1, enquantoGIT_DEFAULT_HASH
está configurado para usar SHA-256 já.Antes de 2.29, isso resultava em um repositório inutilizável que meio afirma ser um repositório SHA-256 com objetos SHA-1 e referências.
Isso foi corrigido.
Veja o commit 47ac970 (20 set 2020) de brian m. Carlson (
bk2204
) .(Fundido por Junio C Hamano -
gitster
- no commit b28919c , 29 de setembro de 2020)fonte