Git 태그 목록, 커밋 sha1 해시 표시 git 태그를 나열합니다. tag1 tag2 git tag

따라서 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 tgit 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

이것은 태그에 대한 모든 커밋 목록을 제공합니다. 주석이 달린 태그는 역 참조됩니다. 여기에 감사를 보냅니다 .