답변:
편집 : Jakub Narębski에는 더 많은 자식이 있습니다. 다음과 같은 훨씬 간단한 명령이 완벽하게 작동합니다.
git describe --tags
(또는 --tags
주석이 달린 태그를 체크 아웃 한 경우 태그가 없으면 내 태그가 가벼워서 --tags가 필요합니다.)
원래 답변은 다음과 같습니다.
git describe --exact-match --tags $(git log -n1 --pretty='%h')
더 많은 깃 푸를 가진 사람은 더 우아한 해결책을 가질 수 있습니다 ...
이는 git-log
체크 아웃 한 것부터 로그 를 보고 한다는 사실을 활용합니다 . %h
약식 해시를 인쇄합니다. 그런 다음 git describe --exact-match --tags
해당 커밋과 정확히 일치하는 태그 (경량 또는 주석)를 찾습니다.
$()
위 의 구문은 bash 또는 이와 유사한 것을 사용한다고 가정합니다.
--exact-match
귀하의 의견에 앞서 답변 초에 추가 했습니다. 그것을 제거하고 여전히 fuzzier 입력에서 좋은 정보를 얻을 수 있다는 것을 알고 반갑습니다.
git rev-parse HEAD
하는 것이 더 나은 해결책입니다 git log -n1 --pretty='%h'
...하지만 왜 간단하게 쓸 수 없습니다 HEAD
(또는 git describe
기본값으로 HEAD)?
이것은 나를 위해 일했다 git describe --tags --abbrev=0
현재 HEAD (또는 커밋)의 모든 태그 표시
git tag --points-at HEAD
git describe
A는 도자기 당신이 피해야 명령은 :
http://git-blame.blogspot.com/2013/06/checking-current-branch-programatically.html
대신에 나는 다음을 사용했다.
git name-rev --tags --name-only $(git rev-parse HEAD)
^0
태그에 해당하는 커밋에 대한 후행 을 출력 합니다 (예 : 태그 1.0
가 출력하는 경우 1.0^0
). Git 출력 만 가능한 방법 1.0
이 있습니까, 아니면 이것을 위해 sed를 사용해야합니까?
태그를 체크 아웃하면 "분리 된 헤드"가 있습니다. 일반적으로 Git의 HEAD 커밋은 현재 체크 아웃 한 지점에 대한 포인터입니다. 그러나 로컬 브랜치 (예 : 태그 또는 원격 브랜치) 이외의 것을 체크 아웃하면 "분리 된 헤드"가 있습니다. 실제로는 브랜치에 있지 않습니다. 머리가 분리 된 상태에서는 커밋하지 마십시오.
수정하지 않으려면 태그를 확인하십시오. 파일의 내용을 검사 중이거나 태그에서 프로젝트를 빌드하려는 경우 커밋하지 않는git checkout my_tag
한 파일 을 사용 하고 작업하는 것이 좋습니다 . 파일 수정을 시작하려면 태그를 기반으로 분기를 작성해야합니다.
$ git checkout -b my_tag_branch my_tag
my_tag_branch
에서 시작하는 이라는 새 분기를 만듭니다 my_tag
. 이 지점에서 변경 사항을 커밋하는 것이 안전합니다.
git log --decorate
현재 체크 아웃 된 커밋을 가리키는 참조가 무엇인지 알려줍니다.
git describe
하면 (주석) 태그를 정확히 경우, 또는 태그 이름을 표시 할<tag>-<n>-g<shortened sha-1>
경우하지, 어디<n>
커밋 수 있기 때문에입니다<tag>
.