Git에서 어떤 커밋을 가리키는 지 어떻게 알 수 있습니까?
저장소에 주석이 달린 태그가 많이 있으며 태그를 가리키는 커밋을 해결하고 싶습니다. 태그와 커밋 SHA를 나열하는 명령이 있습니까? 태그를 확인하고 HEAD를 보면 너무 힘들 것 같습니다.
최신 정보
내가 실제로 원하는 것은 태그로 이어지는 역사를 보는 것만 git log <tagname>
으로 충분하다는 반응을 겪은 후에 깨달았습니다 .
답변으로 표시된 답변은 태그 및 커밋 목록을 얻는 데 유용합니다. 약간의 셸 해커를 사용하면 SHA + 커밋 메시지로 변환 할 수 있다고 확신합니다.
이 작업을 수행하는 한 가지 방법은입니다 git rev-list
. 다음은 태그가 가리키는 커밋을 출력합니다.
$ git rev-list -n 1 $TAG
~/.gitconfig
많이 사용 하면 별칭으로 추가 할 수 있습니다 .
[alias]
tagcommit = rev-list -n 1
그런 다음 호출하십시오.
$ git tagcommit $TAG
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>
그러나 커밋 차이도 덤프합니다. 해당 diff를 생략하려면을 사용하십시오 git log -1 <tag>
. (@DolphinDream 및 @demisx 감사합니다!)
내 저장소 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
(자세한 내용은 설명서를 참조하십시오).
에서 이고르 Zevaka :
요약
거의 똑같이 수용 가능하지만 다른 답변은 약 4 가지이므로 태그를 스키닝하는 모든 다른 방법을 요약합니다.
git rev-list -1 $TAG
( 답변 ).git rev-list
출력까지 이어질 커밋$TAG
유사하기git log
만 커밋의 SHA1을 도시. 이-1
(가)이를 가리키는 커밋에 출력을 제한합니다.git show-ref --tags
( answer )는 모든 태그 (로컬 및 원격에서 가져온) 및 해당 SHA1을 표시합니다.git show-ref $TAG
( answer )은 SHA1과 함께 태그 및 경로를 표시합니다.git rev-parse $TAG
( answer )는 주석이없는 태그의 SHA1을 표시합니다.git rev-parse --verify $TAG^{commit}
( answer )는 주석이 달린 태그와 주석이없는 태그의 SHA1을 표시합니다. Windows에서는git rev-parse --verify %TAG%^^^^{commit}
(모자 4 개)를 사용하십시오.cat .git/refs/tags/*
또는 태그가 로컬인지 또는 원격에서 가져 왔는지 여부에 따라cat .git/packed-refs
( answer ).
이건 어때:
git log -1 $TAGNAME
또는
git log -1 origin/$TAGNAME
태그가 참조하는 커밋의 샤 / 해시를 얻으려면 (태그의 샤가 아님) :
git rev-list -1 <tag>
또한 "올바른"방법을 알고 싶지만 그 동안에는 다음과 같이 할 수 있습니다.
git show mytag | head -1
이것은 꽤 오래되었지만 커밋으로 태그를 나열하기 위해 방금 찾은 멋진 기능을 지적 할 것이라고 생각했습니다.
git log --decorate=full
커밋에서 종료 / 시작되는 브랜치와 커밋에 대한 태그가 표시됩니다.
태그가 사용하는 위치를보다 이해하기 쉽게 이해할 수 있습니다.
git log --graph |git name-rev --stdin --tags |less
를 통해 원하는 태그로 스크롤합니다 /
.
더 컴팩트 한 뷰 ( --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
이것은 현재 SHA1 해시를 얻을 것입니다
약식 커밋 해시
git show <tag> --format="%h" --> 42e646e
커밋 해시
git show <tag> --format="%H" --> 42e646ea3483e156c58cf68925545fffaf4fb280
에서 자식 메일 링리스트 , 여기에 주석 태그 자동 역 참조와 태그를 해시를 커밋의 목록을 얻을 수있는 방법입니다 :
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags
나는 또한 올바른 방법 을 알고 싶습니다 .하지만 항상 들여다 볼 수 있습니다.
$ cat .git/packed-refs
또는:
$ cat .git/refs/tags/*
SOMETAG 태그 (태그, 날짜 등)의 세부 정보를 보려면 커밋의 해시와 커밋에 대한 약간의 정보가 있지만 전체 diff가없는 경우
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) .....
이것은 파일 이름을 표시하지 않지만 적어도 저장소의 느낌을 얻습니다.
cat .git/refs/tags/*
해당 디렉토리의 각 파일에는 커밋을 가리키는 커밋 SHA가 포함됩니다.
따라서 릴리스 폴더가 많이 있습니다.이 폴더는 몇 가지 다른 저장소 중 하나에서 체크 아웃 될 수 있으며 dev, qa 또는 master 브랜치이거나 프로덕션 릴리스, 태그에서 체크 아웃 될 수 있으며 태그는 주석이 달린 것인지 아닌지. 대상 폴더를보고--형식으로 답을 얻는 스크립트가 있습니다. 문제는 태그 체크 아웃에 대해 다른 버전의 git return different status '입니다.
그래서 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
아래에서 사용할 수 있으며 커밋 해시를 제공합니다.
git show -s --format=%H <tag>^{commit}
약식 커밋 해시가 필요한 경우 git show -s --format=%h <tag>^{commit}
참고 URL : https://stackoverflow.com/questions/1862423/how-to-tell-which-commit-a-tag-points-to-in-git
'Programing' 카테고리의 다른 글
Rails 3.1에서 자산 파이프 라인 (스프로킷) 메시지 로깅을 비활성화하는 방법은 무엇입니까? (0) | 2020.02.26 |
---|---|
Android 앱의 릴리스 버전을 빌드하기 전에 모든 디버그 로깅 호출을 제거하는 방법은 무엇입니까? (0) | 2020.02.26 |
비어 있거나 null JSTL c 태그 평가 (0) | 2020.02.26 |
내부 대 개인 액세스 수정 자 (0) | 2020.02.26 |
Go에 파일이 있는지 확인하는 방법 (0) | 2020.02.26 |