Git에서 태그가 가리키는 커밋을 어떻게 알 수 있습니까?
저장소에 주석이 없는 태그가 여러 개 있는데 이 태그가 가리키는 커밋이 무엇인지 확인하고 싶습니다.태그와 해당 SHA를 나열하는 명령이 있습니까?태그를 확인하고 HEAD를 보는 것은 저에게는 조금 힘든 일인 것 같습니다.
갱신하다
제가 실제로 원했던 것은 단순히 태그에 이르는 역사를 보는 것이라는 것을 제가 응답을 거친 후에 깨달았습니다.git log <tagname>
충분합니다.
답변으로 표시된 답변은 제가 질문한 태그와 커밋 목록을 얻는 데 유용합니다.약간의 셸 해킹을 통해 저는 그것들을 SHA+Commit 메시지로 변환하는 것이 가능하다고 확신합니다.
이를 위한 한 가지 방법은git rev-list
다음은 태그가 가리키는 커밋을 출력합니다.
$ git rev-list -n 1 $TAG
참고 이것은 주석이 달린 태그와 주석이 없는 태그 모두에서 작동합니다.
에별로추수있다니습가할에 할 수 .~/.gitconfig
많이 사용하는 경우:
[alias]
tagcommit = rev-list -n 1
그런 다음 다음 다음과 같이 부릅니다.
$ git tagcommit $TAG
가능한 함정: 로컬 체크아웃 또는 동일한 태그 이름의 분기가 있는 경우 이 솔루션은 "경고: refname 'myTag'가 모호합니다."라는 메시지를 표시할 수 있습니다.이 경우 다음과 같이 특수성을 높이십시오.
$ git rev-list -n 1 tags/$TAG
경고 이것은 주석이 없는 태그에만 적용됩니다. 따라서 일반적인 경우 https://stackoverflow.com/a/1862542/1586965 에서 작동하는 승인된 답변을 사용하는 것이 더 안전합니다.
git show-ref --tags
를 들면, 들면를예,git show-ref --abbrev=7 --tags
다음과 같은 내용이 표시됩니다.
f727215 refs/tags/v2.16.0
56072ac refs/tags/v2.17.0
b670805 refs/tags/v2.17.1
250ed01 refs/tags/v2.17.2
그냥 사용하기git show <tag>
그러나 커밋 차이도 덤프합니다.이러한 차이를 생략하려면 다음을 사용합니다.git log -1 <tag>
(@Dolphin Dream @demisx 덕니다입분과)!!)
이고르 제바카로부터:
요약
거의 동일하게 받아들여질 수 있지만 다른 답이 4개 정도 있기 때문에 태그를 제거하는 모든 다른 방법을 요약하겠습니다.
git rev-list -1 $TAG
(정답).git rev-list
다으로이커출력다니합밋을는음지어까지 합니다.$TAG
와비한과 한.git log
하지만 SHA1의 커밋만 보여줍니다. 그-1
출력을 지정하는 커밋으로 제한합니다.git show-ref --tags
(답변)은 모든 태그(로컬 및 원격에서 가져온 태그)와 해당 SHA1을 표시합니다.git show-ref $TAG
(정답)은 SHA1과 함께 태그와 해당 경로를 표시합니다.git rev-parse $TAG
(정답)은 주석이 없는 태그의 SHA1을 표시합니다.git rev-parse --verify $TAG^{commit}
(답변)은 주석이 달린 태그와 주석이 없는 태그 모두의 SHA1을 표시합니다.Windows 사용 시git rev-parse --verify %TAG%^^^^{commit}
(4개의 모자)cat .git/refs/tags/*
또는cat .git/packed-refs
(응답) 태그가 로컬인지 원격에서 가져온 것인지 여부에 따라 달라집니다.
이 달린 태그의 , 이달태경우의그린,git show-ref TAG
태그가 가리키는 커밋의 해시가 아닌 태그의 해시를 표시합니다.
git show-ref --dereference TAG
추가적으로 추가된 커밋이 가리키는 것을 보여줍니다.^{}
.
사용하다
git rev-parse --verify <tag>^{commit}
(이것은 주석이 달린 태그에 대해서도 커밋의 SHA-1을 반환합니다.)
git show-ref <tag>
다음과 같은 경우에도 작동할 것입니다.<tag>
주석이 달리지 않았습니다.그리고 항상 있습니다.git for-each-ref
(자세한 내용은 설명서 참조).
이거 어때:
git log -1 $TAGNAME
OR
git log -1 origin/$TAGNAME
태그가 참조하는 커밋의 sha/hash(태그의 sha가 아님)를 가져오려면 다음을 수행합니다.
git rev-list -1 <tag>
Git-2 이후 짧은 답변
저는 이 질문이 꽤 오랫동안 여기에 있었다는 것을 알고 있습니다. 그고리 CB Bailey 의대답 100% 니합다정.git show-ref --tags --abbrev
사용하기 때문에 이것이 더 좋습니다.git tag
:
git tag --list --format '%(refname:short) %(objectname:short)'
간단. 짧습니다.
칭별로 을 붙입니다.git taglist
다음 명령을 사용합니다.
git config --global alias.taglist "tag --list --format '%(refname:short) %(objectname:short)'"
또한 "올바른" 방법을 알고 싶지만, 그 사이에 다음과 같은 작업을 수행할 수 있습니다.
git show mytag | head -1
그--format
옵션을 사용하여 태그 해시와 커밋 해시를 모두 표시하고 경량 태그와 주석이 달린 태그를 구분할 수 있습니다.
git tag --format="%(color:bold cyan)== %(refname:short) ==%(if)%(object)%(then)%0aTag Hash: %(objectname)%0aTag Date: %(taggerdate:iso-local)%0a Commit: %(object) %0a%0a%(contents)%(else)%0a(lightweight tag)%0a Commit: %(objectname)%(end)%0a"
다음과 유사한 출력을 제공합니다.
== b2lightweight ==
(lightweight tag)
Commit: 0450fae4352dbbbf088419757eda32711316a02e
== c3_annotated ==
Tag Hash: 19961d8678a09a319a9d6c398c79f27cc23d610c
Tag Date: 2021-08-06 15:18:48 -0600
Commit: 85be6e80c109ce44d78f0ca0da8e1ec53817b24c
This is my tag message.
It has multiple lines.
Another line.
alias로 를 Git 별칭정으다사글용여로하벌음있다수습으로 .git config --global -e
다음을 추가합니다.
[alias]
tag-verbose = tag --format='%(color:bold cyan)== %(refname:short) ==%(if)%(object)%(then)%0aTag Hash: %(objectname)%0aTag Date: %(taggerdate:iso-local)%0a Commit: %(object) %0a%0a%(contents)%(else)%0a(lightweight tag)%0a Commit: %(objectname)%(end)%0a'
별칭은 여전히 필터링을 허용합니다.
C:\playground>git tag-verbose -l *b2*
== b2lightweight ==
(lightweight tag)
Commit: 0450fae4352dbbbf088419757eda32711316a02e
에 대한 자세한 은 를 참조하십시오.--format
은 "필드 이름" 아래의 이름"하십시오.git help for-each-ref
. (git help tag
"git-for-each-ref", "git-for-each-ref")라고 .
비록 이것이 꽤 오래되었지만, 저는 커밋이 있는 태그를 나열하는 데 방금 발견한 멋진 기능을 지적하고 싶습니다.
git log --decorate=full
커밋에서 종료/시작할 분기와 커밋에 대한 태그를 표시합니다.
태그가 가리키는 위치를 보다 쉽게 해석할 수 있습니다.
git log --graph |git name-rev --stdin --tags |less
그런 다음 검색할 태그로 스크롤합니다./
.
더 컴팩트한뷰 (다컴팩보기보한트▁((기보▁more보▁view▁compact--pretty=oneline
모든 + 모든헤드(-a
) 또한 도움이 될 수 있습니다.
git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less
약간 무서워 보이지만, 에일리어스가 있을 수도 있습니다.~/.gitconfig
필요하면.
~/.gitconfig
[alias]
ls-tags = !git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less
파일 이름은 표시되지 않지만 저장소에 대한 느낌을 얻을 수 있습니다.
cat .git/refs/tags/*
해당 디렉터리의 각 파일에는 커밋을 가리키는 커밋 SHA가 포함되어 있습니다.
git 메일링 목록에서 주석이 달린 태그에 대한 자동 역참조가 있는 태그에 대한 커밋 해시 목록을 가져오는 방법은 다음과 같습니다.
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags
저도 올바른 방법을 알고 싶지만, 당신은 항상 다음 중 하나를 엿볼 수 있습니다.
$ cat .git/packed-refs
또는:
$ cat .git/refs/tags/*
현재 SHA1 해시가 표시됩니다.
약식 커밋 해시
git show <tag> --format="%h" --> 42e646e
해시 커밋
git show <tag> --format="%H" --> 42e646ea3483e156c58cf68925545fffaf4fb280
태그 SOMTAG(태거, 날짜 등)의 세부 정보, 이 태그가 가리키는 커밋 해시 및 커밋에 대한 약간의 정보를 확인하고 싶지만 완전한 차이는 없습니다.
git show --name-status SOMETAG
출력 예:
tag SOMETAG
Tagger: ....
Date: Thu Jan 26 17:40:53 2017 +0100
.... tag message .......
commit 9f00ce27c924c7e972e96be7392918b826a3fad9
Author: .............
Date: Thu Jan 26 17:38:35 2017 +0100
.... commit message .......
..... list of changed files with their change-status (like git log --name-status) .....
릴리스 폴더를 많이 가지고 있는데, 이 폴더는 몇 가지 다른 저장소 중 하나에서 체크아웃할 수 있고, dev, qa 또는 master 브랜치일 수도 있고, 프로덕션 릴리스일 수도 있고, 태그에서 체크아웃할 수도 있고, 태그에 주석이 달 수도 있고, 그렇지 않을 수도 있습니다.나는 대상 폴더를 보고 - 양식으로 답을 받을 스크립트를 가지고 있습니다.문제는 다른 버전의 git이 태그 체크아웃에 대해 다른 상태를 반환한다는 것입니다.
그래서 찾았습니다.git show-ref --tags
주석이 달린 태그를 제외하고 처음에 작동했습니다.그러나 -d를 추가하면 태그 목록에 태그에 대한 항목과 주석에 대한 항목이 별도로 추가되었습니다(주석 커밋은 sed로 제거한 ^{}로 식별됨).
그래서 이것이 제 대본의 핵심입니다. 원하는 모든 사람을 위한 것입니다.
REPO=`git --git-dir=${TARGET} remote show origin -n | \
grep "Fetch URL:" | \
sed -E "s/^.*\/(.*)$/\1/" | \
sed "s/.git$//"`
TAG=`git --git-dir=${TARGET} show-ref -d --tags | \
grep \`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD\` | \
cut -d\ -f2 | \
cut -d/ -f3 | \
sed "s/\^{}$//"`
if [ "${TAG}" == "" ] ; then
BRANCH=`git --git-dir=${TARGET} show-ref --heads | \
grep \`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD\` | \
cut -d\ -f2 | \
cut -d/ -f3`
TAG=${BRANCH}
fi
사용할 수 , 해시 ▁▁give▁can 커밋 해시를 제공합니다.
git show -s --format=%H <tag>^{commit}
hash가 필요한 경우에는 " " " 입니다.git show -s --format=%h <tag>^{commit}
해키해
을 구문 합니다..git/packed-refs
을 형을지정으로 합니다.{tag}\t{sha}
sed -n '/ refs\/tags/ { s@\([^ ]*\) refs/tags/\(.*\)@\2\t\1@; p}' .git/packed-refs
git rev-list --no-walk [tag_name]
언급URL : https://stackoverflow.com/questions/1862423/how-to-tell-which-commit-a-tag-points-to-in-git
'sourcetip' 카테고리의 다른 글
Xcode 프로젝트 대 Xcode 작업 공간 - 차이점 (0) | 2023.05.08 |
---|---|
npm이 작동하지 않음 - "ECONNRESET 읽기" (0) | 2023.05.08 |
현재 날짜 및 시간 가져오기 (0) | 2023.05.08 |
C/C++에서 포인터 '디레퍼런스'는 무엇을 의미합니까? (0) | 2023.05.08 |
Postgre가 있습니까?SQL Server 프로파일러와 동등한 SQL? (0) | 2023.05.08 |