Eu tenho um monte de tags não anotadas no repositório e quero descobrir para qual commit elas apontam. Existe um comando que apenas listará as tags e seus SHAs de confirmação? Verificando a etiqueta e olhando para a cabeça parece um pouco trabalhoso para mim.
Atualizar
Percebi, depois de analisar as respostas, que o que realmente queria era simplesmente olhar para o histórico que antecedeu a marca, o que git log <tagname>
é suficiente.
A resposta marcada como resposta é útil para obter uma lista de tags e seus commits, que foi o que perguntei. Com um pouco de hackery de shell, tenho certeza de que é possível transformá-los em mensagem de confirmação do SHA +.
git show-ref
mostra sha da tag, não sha da revisão do repo. $ Git teste show-ref 08b9c774ab20e5bdb638339cf4ea2c124b0dae54 refs / tags / teste $ git teste de checkout cabeça está agora em c7f8831 ... $ git checkout 08b9c77 cabeça está agora em c7f8831 ...--dereference
Respostas:
Uma maneira de fazer isso seria com
git rev-list
. A seguir, será exibida a confirmação para a qual uma tag aponta:Você pode adicioná-lo como um alias
~/.gitconfig
se você o usa muito:E depois chame-o com:
fonte
git rev-parse <tag>
? Ougit rev-list -1 <tag>
?git rev-parse $TAG
retorna o SHA1 do objeto tag, não o commit ao qual ele aponta.git rev-list -1
funciona, no entanto.git rev-parse $TAG^{commit}
ougit rev-parse $TAG^{}
excluir a referência anotada / tag assinadogit rev-list $TAG --max-count=1
git tag -a
orgit tag -s
,git rev-parse <tag>
você fornecerá o SHA-1 de um objeto de tag em si, enquantogit rev-list -1 <tag>
fornecerá o SHA-1 de confirmação (revisão) para o qual aponta, o mesmo quegit rev-parse <tag>^{commit}
. HTH.Por exemplo,
git show-ref --abbrev=7 --tags
mostrará algo como o seguinte:fonte
.git/packed-refs
ou.git/refs/tags/*
git tag --verbose
mostrá-los também?-d
sinalizador para obter a confirmação referenciada (em uma segunda linha).git show-ref
se comportar de maneira diferente nos dois tipos diferentes de tags não é um conhecimento óbvio ou comum.Apenas use
git show <tag>
No entanto, também despeja diffs de confirmação. Para omitir essas diferenças, use
git log -1 <tag>
. (Obrigado a @DolphinDream e @demisx!)fonte
git show <tag>
mostra o diff, não o commit para o qual a tag aponta.git show
despeja muito mais coisas na tela que não precisam estar lá. Ele obscurece o hash de confirmação real que você está procurando. Um comando melhor égit log -1 [tag-name]
ougit log -1 --pretty=oneline [tag-name]
se você deseja oneliners.No meu repositório,
git show-ref TAG
mostra o hash da tag, não o hash do commit para o qual aponta.git show-ref --dereference TAG
mostra, adicionalmente, o commit que está sendo apontado.fonte
De Igor Zevaka :
Sumário
Como existem cerca de 4 respostas quase igualmente aceitáveis e diferentes, irei resumir todas as maneiras diferentes de identificar uma etiqueta.
git rev-list -1 $TAG
( resposta )git rev-list
produz as confirmações que levam à$TAG
semelhante,git log
mas apenas mostrando o SHA1 da confirmação. A-1
limita a saída para a cometê-lo aponta.git show-ref --tags
( resposta ) mostrará todas as tags (locais e buscadas no controle remoto) e seus SHA1s.git show-ref $TAG
( resposta ) mostrará a tag e seu caminho junto com o SHA1.git rev-parse $TAG
( resposta ) mostrará o SHA1 de uma tag não anotada.git rev-parse --verify $TAG^{commit}
( resposta ) mostrará um SHA1 de tags anotadas e não anotadas. No Windows, usegit rev-parse --verify %TAG%^^^^{commit}
(quatro chapéus).cat .git/refs/tags/*
oucat .git/packed-refs
( resposta ), dependendo de a etiqueta ser local ou buscada remotamente.fonte
Usar
(que retornaria o SHA-1 de uma confirmação mesmo para a tag anotada).
git show-ref <tag>
também funcionaria se<tag>
não estiver anotado. E sempre existegit for-each-ref
(consulte a documentação para obter detalhes).fonte
git rev-parse <tag>~0
que também parece funcionar e não requer escape especial no Windows (no qual são necessários quatro chapéus (^) em vez de um). O sufixo~<number>
fornece o <número> a confirmação do pai, portanto,~0
gera a confirmação. Btw,^0
também é uma abreviação válida para o^{commit}
sufixo de revisão.Que tal agora:
OU
fonte
Para obter o sha / hash do commit ao qual uma tag se refere (não o sha da tag):
git rev-list -1 <tag>
fonte
Eu também gostaria de saber o caminho "certo", mas, enquanto isso, você pode fazer o seguinte:
fonte
git show --oneline mytag | head -1
Embora isso seja bastante antigo, pensei em apontar um recurso interessante que acabei de encontrar para listar tags com commits:
Ele mostrará os ramos que terminam / iniciam em uma confirmação e as tags para confirmações.
fonte
Você também pode obter uma imagem mais fácil de interpretar de onde as tags apontam para o uso
e depois vá até a tag que você está procurando
/
.Uma visão mais compacta (
--pretty=oneline
) e todas as cabeças (-a
) também podem ajudar:Parece um pouco assustador, mas também pode ser alternativo,
~/.gitconfig
se necessário.fonte
Resposta curta pós-Git-2
Eu sei que essa pergunta está aqui há um bom tempo. E a resposta do CB Bailey é 100% correta:
git show-ref --tags --abbrev
Eu gosto mais deste, pois usa
git tag
:Simples. Baixo.
PS alias isso como
git taglist
com este comando:fonte
Na lista de discussão git , eis a maneira de obter a lista de hashes de confirmação para tags com desreferenciação automática para tags anotadas:
fonte
Isso não mostra os nomes dos arquivos, mas pelo menos você percebe o repositório.
Cada arquivo nesse diretório contém um SHA de confirmação apontando para uma confirmação.
fonte
.git/packed-refs
funcionou embora.eu também gostaria de saber o caminho certo , mas você sempre pode espiar:
ou:
fonte
git rev-list
.Isso fornecerá o hash SHA1 atual
Hash de confirmação abreviado
Confirmar hash
fonte
git log <tag> -n 1 --pretty=%H
funciona #Se você deseja ver os detalhes da tag SOMETAG (tagger, date, etc), o hash do commit para o qual ele aponta e um pouco de informações sobre o commit, mas sem o diff completo, tente
Exemplo de saída:
fonte
Portanto, eu tenho um monte de pastas de lançamento, nas quais essas pastas podem ser retiradas de um de alguns repositórios diferentes e podem ser dev, qa ou ramificações principais ou podem ser liberações de produção, retiradas de uma tag, e a tag pode ser anotado ou não. Eu tenho um script que irá olhar para a pasta de destino e voltar uma resposta no formulário -. O problema é que versões diferentes do git retornam status diferente 'para uma verificação de tags.
Por isso, achei que
git show-ref --tags
funcionou inicialmente, exceto pelas tags anotadas. No entanto, a adição de -d adicionou uma entrada separada à lista de tags, uma para a tag e a outra para a anotação (o commit da anotação foi identificado como ^ {}, que eu retirei com o sed).Portanto, este é o núcleo do meu script, para quem quiser: -
fonte
Pode usar abaixo, ele dará o hash de confirmação
git show -s --format=%H <tag>^{commit}
Se o hash de confirmação abreviado for necessário,
git show -s --format=%h <tag>^{commit}
fonte