따라서 git tag
명령은 현재 git 태그를 나열합니다.
tag1
tag2
git tag -n
태그의 메시지를 인쇄
tag1 blah blah
tag2 blah blah
tag1 및 tag2의 해시를 얻는 가장 좋은 방법은 무엇입니까?
답변
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 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 에 잘 설명되어 있습니다.
답변
주석이 달린 태그에는 자체 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^{}
답변
모든 종류의 참조 (분기, 태그 …)에서 참조하는 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에서 태그가 가리키는 커밋을 확인하는 방법 의 멋진 요약을 참조하십시오 . .
답변
태그는 서명 및 / 또는 메시지를 보내야합니다. 경량 태그에는 SHA1 개체가 없으며 단지 참조 일뿐입니다. 그렇지 않으면 시도하십시오 git show
.
답변
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags
이것은 태그에 대한 모든 커밋 목록을 제공합니다. 주석이 달린 태그는 역 참조됩니다. 여기에 감사를 보냅니다 .