답변:
Tag 객체의 SHA1 해시로 git 태그를 얻으려면 다음을 실행할 수 있습니다.
git show-ref --tags
그러면 출력은 다음과 같습니다.
0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0
각 줄은 태그의 SHA1 해시이며 뒤에 refs/tags/
.
태그 개체 대신 커밋의 SHA1 해시를 원하면 다음을 실행할 수 있습니다.
git show-ref --tags -d
그러면 다음과 같은 출력이 생성됩니다.
0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
3e233dd8080617685992dc6346f739a6f6396aae refs/tags/1.0.0^{}
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
09173980152a7ed63d455829553448ece76c6fdc refs/tags/1.1.0^{}
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
56d803caaa8a93a040b7be0b8a36abdc4ce8c509 refs/tags/1.2.0^{}
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0
1bdf628a70fda7a0d840c52f3abce54b1c6b0130 refs/tags/1.3.0^{}
^{}
시작으로 끝나는 줄 은 태그가 가리키는 실제 커밋의 SHA1 해시 로 시작합니다.
git show-ref --tags -d
. 역 참조 된 태그는 ^{}
.
git tag
명령은 저개발이다. 커밋 내역 순서의 전체 태그 세부 정보 및 태그와 같이 많은 것이 필요하지만 누락되었습니다.
대신 내가 원하는 것을 정확히 제공하지만 얻을 수는 없습니다 git tag
.
git log --oneline --decorate --tags --no-walk
이렇게하면 전체 로그에있는 것처럼 시간 역순으로 태그의 매우 멋진 색상 코드보기가 제공됩니다. 이렇게하면 태그를 볼 수있을뿐만 아니라 축약 된 해시와 태그 커밋의 커밋 메시지도 볼 수 있습니다.
나는 그것을 별칭 한 git t
및 git tags
다음과 같습니다 :
git config --global alias.tags "log --oneline --decorate --tags --no-walk"
git config --global alias.t "!git tags"
참고 : Git이 다른 별칭에서 별칭을 호출하는 것을 지원하지 않기 때문에 bash 리디렉션을 사용해야했습니다 git t
.
커밋 날짜와 시간을 보려면 다음을 시도하십시오.
git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
--date
옵션 에서 다른 날짜 형식을 사용할 수있을 뿐만 아니라 옵션의 고유 한 취향에 맞게 출력을 완전히 제어 할 수 --pretty
있습니다. 두 옵션 모두 git-log Documentation 에 잘 설명되어 있습니다.
git log
는 강력합니다! 원하는 것을 정확하게 보여줄 수 있습니다 . 시도해보십시오 git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
. 다른 날짜 형식도 가능합니다. --date
도움말 페이지에서 찾아보세요 . 이 옵션을 포함하도록 답변을 업데이트했습니다.
--pretty
및을 사용 하여 수정할 수 있습니다 %H
. +1 감사합니다 :)
주석이 달린 태그에는 자체 SHA-1이 있으므로 역 참조해야합니다. 그러나 경량 태그는 이미 커밋을 가리 키므로 역 참조 할 수 없습니다. 해결하려면 두 가지를 모두 나열하고 커밋 객체를 필터링해야합니다.
git for-each-ref --sort -v:refname --format '%(objectname) %(objecttype) %(refname)
%(*objectname) %(*objecttype) %(*refname)' refs/tags | grep commit
경량 태그를 사용한 결과 :
589610a0114a375f1bff716dd308cf8df08571d3 commit refs/tags/1.4.9
e25952a74bf379783944bef9c4fcc60600cb764c commit refs/tags/1.4.8
19b1c2c96a9678837f57eac86cf3d22842731510 commit refs/tags/1.4.7
7208212a55c4a56af34da781a7f730d6ddd557a1 commit refs/tags/1.4.6
62ec20337a4125496bd4f56288f3283963153194 commit refs/tags/1.4.5
주석이 달린 태그가있는 결과 :
e2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 commit refs/tags/v2.11.0-rc3^{}
1310affe024fba407bff55dbe65cd6d670c8a32d commit refs/tags/v2.11.0-rc2^{}
3ab228137f980ff72dbdf5064a877d07bec76df9 commit refs/tags/v2.11.0-rc1^{}
1fe8f2cf461179c41f64efbd1dc0a9fb3b7a0fb1 commit refs/tags/v2.11.0-rc0^{}
454cb6bd52a4de614a3633e4f547af03d5c3b640 commit refs/tags/v2.11.0^{}
git log --tags --oneline --no-walk
하면 주석이 달린 태그도 자동으로 따릅니다. :)
모든 종류의 참조 (분기, 태그 ...)에서 참조하는 SHA1을 얻으려면 다음을 사용하십시오 git rev-parse
.
git rev-parse tag1^0 tag2^0
별도의 줄에 전체 SHA1 만 인쇄합니다. ^0
접미사는 태그가 가리키는 커밋의가 주석 여부이든이의 SHA1을 인쇄 할 수 있도록 특수 구문입니다. (주석이있는 태그는 메타 데이터와 함께 커밋에 대한 포인터를 포함하는 자체 권한의 객체입니다. 태그에 주석이 달린 것을 알고 있고 태그의 SHA1을 원하는 경우 ^0
.)
물론 SHA1을 허용하는 모든 Git 명령도 태그를 허용해야하므로이 작업을 자주 수행 할 필요는 없습니다!
비슷한 질문이 있었지만 (여러) 특정 태그의 해시를 원했습니다. "show-ref"가 태그 목록을 가져 오므로이 작업을 수행합니다.
% git show-ref v3.4.0.13-ga v3.4.0.13-base
bfc7747c4cf67a4aacc71d7a40337d2c3f73a886 refs/tags/v3.4.0.13-base
79ba365e75a4f9cee074d25a605a26acb660b7de refs/tags/v3.4.0.13-ga
그러나 "git show"를 사용한 몇 가지 실험 결과 다음 명령이 나왔습니다.
% git show --summary --oneline --decorate v3.4.0.13-ga v3.4.0.13-base
79ba365 (tag: v3.4.0.13-ga, rhins013a) commit message the first
bfc7747 (tag: v3.4.0.13-base) commit message the second
"show-ref"보다 "show"를 사용하는 것이 훨씬 더 익숙하기 때문에 후자가 기억하기 쉽고 더 도움이됩니다.
Git에서 태그가 가리키는 커밋을 확인하는 방법 의 멋진 요약을 참조하십시오 . .
나는 anatoly techtonik 게시물 에서 명령을 받아 태그 / 커밋의 헤드 라인 메시지를 추가하고 멋진 cols로 형식을 지정했습니다.
결과는 동일한 출력 git tag -n
이지만 commit-hash를 접두어로 사용합니다.
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname:short)%(else)%(objectname:short)%(end)|%(refname:short)|%(contents:subject)' refs/tags | column -t -s '|'
짧은 대신 긴 해시를 사용하려면 yust objectname:short
를 objectname
.
git tag
(-n
또는 다른 옵션 ...)이 커밋 해시를 표시하지 않는지 궁금 합니다. 사람들이 어떤 솔루션을 제시하는지 보는 것은 좋지만, 나는 이것이 가능한 옵션의 디자인 결함이라고 생각합니다.