나는 명령 git describe
을 git-name-rev
보았지만 둘 이상의 태그를 나열하도록 관리하지 못했습니다.
예 : sha1 48eb354가 있고 태그 A와 B가이를 가리키는 것을 알고 있습니다. 그래서 git {something} 48eb354
"A, B"와 유사한 출력을 생성 하는 git 명령 을 원합니다 . 나는 다른 태그 또는 분기와 관련된 참조를 아는 데 관심이 없습니다.
답변:
git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'
경량 및 주석이 달린 태그 모두에서 작동해야합니다.
-e 's/\^{}//'
-d
옵션입니다 git show-ref
. 문서에서 "-d, --dereference 태그를 객체 ID로 역 참조합니다."^ {} "가 추가 된 상태로 표시됩니다."
${ref}
주석 태그를 포함 :hash=$(git rev-parse "${ref}^0"); git show-ref --tags -d | sed -n -e 's,^'"${hash}"' refs/tags/\(.*\)^{}$',\1,p'
git tag --points-at HEAD
HEAD의 모든 태그를 표시합니다. HEAD를 sha1 ID로 대체 할 수도 있습니다.
당신이 사용할 수있는:
git tag --contains <commit>
특정 커밋에서 모든 태그를 표시합니다. 다음 대신 사용할 수 있습니다.
git tag --points-at HEAD
1.7.10에서만 사용할 수 있습니다.
--contains
또한 --points-at
(7-8s 실행 시간 vs <1s) 보다 훨씬 느리게 나타납니다
git for-each-ref --format='%(objectname) %(refname:short)' refs/tags/ |
grep ^$commit_id |
cut -d' ' -f2
더 쉽게 할 수없는 것이 아쉽습니다. git tag
커밋 ID를 포함하는 또 다른 플래그는 해당 git for-each-ref
호출을 자연스럽게 표현할 수 있습니다.
다음 명령은 작업을 수행하지만 .git 디렉토리의 내용을 직접 구문 분석하므로 git 저장소 형식이 변경되면 중단 될 수 있습니다.
grep -l -r -e '^48eb354' .git/refs/tags|sed -e 's,.*/,,'