git에서 특정 커밋을 가리키는 모든 태그를 나열하는 방법


85

나는 명령 git describegit-name-rev보았지만 둘 이상의 태그를 나열하도록 관리하지 못했습니다.

예 : sha1 48eb354가 있고 태그 A와 B가이를 가리키는 것을 알고 있습니다. 그래서 git {something} 48eb354"A, B"와 유사한 출력을 생성 하는 git 명령 을 원합니다 . 나는 다른 태그 또는 분기와 관련된 참조를 아는 데 관심이 없습니다.

답변:


46

git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'

경량 및 주석이 달린 태그 모두에서 작동해야합니다.


감사. 정확히 내가 원하는 것.
mrutyunjay

이것은 git <1.7.10에서 잘 작동합니다. sed 표현의 두 번째 부분이 무엇을하는지 설명해 주시겠습니까? -e 's/\^{}//'
Dave

아, 신경 쓰지 마세요. 의 -d옵션입니다 git show-ref. 문서에서 "-d, --dereference 태그를 객체 ID로 역 참조합니다."^ {} "가 추가 된 상태로 표시됩니다."
Dave

1
임의 사용에 대한 약간의 향상 / 일반화 ${ref}주석 태그를 포함 :hash=$(git rev-parse "${ref}^0"); git show-ref --tags -d | sed -n -e 's,^'"${hash}"' refs/tags/\(.*\)^{}$',\1,p'
기독교 Goetze


50

당신이 사용할 수있는:

git tag --contains <commit>

특정 커밋에서 모든 태그를 표시합니다. 다음 대신 사용할 수 있습니다.

git tag --points-at HEAD

1.7.10에서만 사용할 수 있습니다.


10
NB : 'git tag --contains'는 커밋을 가리키는 태그 만 표시하는 것이 아니라 도달 할 수있는 이후 태그도 포함합니다.
staafl

최소한 버전 2.6.4에서는 지정된 커밋을 가리키는 단일 태그 만 반환합니다. 모두 반환하지는 않습니다. @max의 위 답변은 여러 태그에 대해 제대로 작동하는 것 같습니다.
Dejay Clayton

--contains또한 --points-at(7-8s 실행 시간 vs <1s) 보다 훨씬 느리게 나타납니다
SSilk

4
git for-each-ref --format='%(objectname) %(refname:short)' refs/tags/ |
  grep ^$commit_id |
    cut -d' ' -f2

더 쉽게 할 수없는 것이 아쉽습니다. git tag커밋 ID를 포함하는 또 다른 플래그는 해당 git for-each-ref호출을 자연스럽게 표현할 수 있습니다.


1
정보를 주셔서 감사하지만이 명령을 사용하여 태그를 볼 수없는 것 같습니다. 더 간단한 "git for-each-ref | grep 48eb354"를 사용하면 0 개의 일치 항목이 제공됩니다. 반면에 gitk는이 커밋 앞에 2 개의 태그를 멋지게 나열합니다.
Zitrax 2010

1

다음 명령은 작업을 수행하지만 .git 디렉토리의 내용을 직접 구문 분석하므로 git 저장소 형식이 변경되면 중단 될 수 있습니다.

grep -l -r -e '^48eb354' .git/refs/tags|sed -e 's,.*/,,'

그것들도 나열하지 않습니다. 전체 .git 폴더를 grepping하는 경우 sha1을 볼 수있는 유일한 장소는 gitk.cache 및 logs / refs / remotes / origin / master입니다. 어떻게 gitk가 그들을 나열 할 수 있습니까? 나는 또한 내가보고있는 태그가 주석이 달린 태그라는 것을 알았습니다. 이것이 두 가지 현재 답변이 나를 위해 작동하지 않는 이유 일 수 있습니다.
Zitrax 2010

1

현재 커밋의 경우 다음을 사용할 수 있습니다.

git tag --points-at $(git log -n1 --pretty='%H')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.