Git에서 현재 커밋에 대한 해시를 얻으려면 어떻게 해야 합니까?
Git에서 현재 커밋의 해시를 얻으려면 어떻게 해야 합니까?
확장 개체 참조를 해시로 변환하려면 다음을 사용합니다.
git rev-parse HEAD
또는
git rev-parse --verify HEAD
짧은 해시 검색하기
git rev-parse --short HEAD
참조(예: 분기 및 태그)를 해시로 변환하려면 다음을 사용합니다.git show-ref
그리고.git for-each-ref
.
해시를 단된커가면려오를 합니다.%h
형식 지정자:
git log --pretty=format:'%h' -n 1
%H
긴 커밋 해시를 나타냅니다.또한.-1
의 대신에 직접 사용할 수 있습니다.-n 1
.
Git log를 사용하는 다른 하나:
git log -1 --format="%H"
그것은 @ofculture의 것과 매우 유사하지만 조금 더 짧습니다.
전체 SHA를 가져오는 방법
$ git rev-parse HEAD
cbf1b9a1be984a9f61b79a05f23b19f66d533537
단축된 버전을 가져오는 방법
$ git rev-parse --short HEAD
cbf1b9a
커밋 해시
git show -s --format=%H
약식 커밋 해시
git show -s --format=%h
그-s
플래그가 다음과 같습니다.--no-patch
① "Suppress diff output"은 "Suppress diff output"입니다.
자세한 내용은 여기를 클릭하십시오.git show
예문들
아직 아무도 제안하지 않았기 때문에 완성도를 위해서입니다. .git/refs/heads/master
는 한입니다: " " " 에 대한 커밋의 입니다.master
그래서 당신은 거기서 그것을 읽을 수 있었습니다.
또는 명령으로 다음을 수를 입력합니다.
cat .git/refs/heads/master
업데이트:
Git는 이제 /refs/heads/폴더에 파일로 저장하는 대신 pack-ref 파일에 일부 headref를 저장하는 것을 지원합니다.https://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html
항상 있습니다.git describe
뿐만아라니. 으로 --기적으로본▁-- --를 합니다.
john@eleanor:/dev/shm/mpd/ncmpc/pkg (master)$ git describe --always
release-0.19-11-g7a68a75
사용하다git rev-list --max-count=1 HEAD
스크립트 중에 해시를 변수에 저장해야 하는 경우 다음을 사용할 수 있습니다.
last_commit=$(git rev-parse HEAD);
또는 처음 10자만 원하는 경우(github.com 처럼)
last_commit=$(git rev-parse --short=10 HEAD);
만약 당신이 그것을 하기 위해 초해키적인 방법을 원한다면:
cat .git/`cat .git/HEAD | cut -d \ -f 2`
합니다.ref: {path from .git}
이 명령은 이를 읽고 "ref:"를 잘라낸 다음 가리키는 모든 파일을 읽습니다.
헤드가 "ref:..."가 아니라 해시 자체일 것이기 때문에 이것은 물론 분리 헤드 모드에서는 실패할 것입니다. 하지만 알다시피, 당신은 당신의 bash 한 줄기에 그렇게 많은 스마트를 기대하지 않을 것입니다.세미콜론이 부정행위를 한다고 생각하지 않는다면, 그래도...
HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \ -f 2)")"; done; echo $HASH
저는 조금 더 다른 것이 필요했습니다. 커밋의 전체 sha1을 표시하지만 작업 디렉터리가 깨끗하지 않으면 끝에 별표를 추가하는 것입니다.여러 명령을 사용하지 않으면 이전 답변의 옵션이 모두 작동하지 않습니다.
다음은 다음과 같은 기능을 하는 라이너입니다.
git describe --always --abbrev=0 --match "NOT A TAG" --dirty="*"
결과:f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe*
설명: 현재 커밋을 설명합니다(주석 태그 사용). 그러나 "태그 없음"이 포함된 태그만 포함됩니다.공백을 할 수 없기 , 입니다.--always
back 는 full back)을 합니다.--abbrev=0
이며, 가 )일 됩니다.--dirty
.
별표를 추가하지 않으려면 이전 답변의 다른 모든 명령과 마찬가지로 작동합니다.
git describe --always --abbrev=0 --match "NOT A TAG"
결과:f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe
git rev-parse HEAD
요령을 터득합니다.
실제 지점을 저장하는 것보다 나중에 체크아웃하기 위해 저장해야 하는 경우:
cat .git/HEAD
출력 예:
ref: refs/heads/master
구문 분석:
cat .git/HEAD | sed "s/^.\+ \(.\+\)$/\1/g"
Windows를 사용하는 경우 wsl.exe를 사용하는 것을 고려할 수 있습니다.
wsl cat .git/HEAD | wsl sed "s/^.\+ \(.\+\)$/\1/g"
출력:
refs/heads/master
이 값은 나중에 체크아웃할 때 사용할 수 있지만 SHA를 가리킵니다.이름으로 실제 현재 분기를 가리키도록 하려면 다음을 수행합니다.
wsl cat .git/HEAD | wsl sed "s/^.\+ \(.\+\)$/\1/g" | wsl sed "s/^refs\///g" | wsl sed "s/^heads\///g"
출력:
master
내가 아는 가장 간단한 방법은:
git show --pretty=%h
해시의 특정 자릿수를 원하는 경우 추가할 수 있습니다.
--abbrev=n
아마도 당신은 모든 세부사항을 기억할 필요가 없도록 가명을 원할 것입니다.다음 단계 중 하나를 수행한 후에는 간단히 다음을 입력할 수 있습니다.
$ git lastcommit
49c03fc679ab11534e1b4b35687b1225c365c630
승인된 답변에 대한 후속 조치로 이를 설정하는 두 가지 방법이 있습니다.
글로벌 구성을 편집하여 명시적인 방법으로 git를 티칭합니다(원래 답변).
# open the git config editor
$ git config --global --edit
# in the alias section, add
...
[alias]
lastcommit = rev-parse HEAD
...
또는 Adrien이 최근 언급한 바와 같이 바로 가기를 가르쳐 주는 바로 가기를 좋아한다면 다음과 같습니다.
$ git config --global alias.lastcommit "rev-parse HEAD"
이부터, 용사를 합니다.git lastcommit
마지막 커밋의 해시를 표시합니다.
다음은 git 파일에서 직접 읽기를 사용하는 Bash 셸의 한 줄기입니다.
(head=($(<.git/HEAD)); cat .git/${head[1]})
git root 폴더에서 위 명령을 실행해야 합니다.
이 방법은 리포지토리 파일이 있을 때 유용할 수 있지만git
명령이 설치되지 않았습니다.
작동하지 않으면 체크인합니다..git/refs/heads
어떤 종류의 머리를 가지고 계십니까?
git show-ref --head --hash head
하지만 속도를 높이려면 디스탄이 언급한 접근법은
cat .git/refs/heads/<branch-name>
지금까지 여기에 나열된 다른 방법보다 훨씬 빠릅니다.
.gitconfig 파일의 홈 페이지에 다음을 추가합니다.
[alias]
sha = rev-parse HEAD
기억하기 쉬운 명령을 사용할 수 있습니다.
$ git sha
59fbfdbadb43ad0b6154c982c997041e9e53b600
git bash에서 $git log -1을 실행합니다.
당신의 명령 뒤에 있는 이 행들을 보게 될 것입니다.
commit d25c95d88a5e8b7e15ba6c925a1631a5357095db .. (info about your head)
d25c95d88a5e8b7e15ba6c925a1631a5357095db, is your SHA for last commit.
메인 깃 레포와 서브 모듈의 예쁜 인쇄물:
echo "Main GIT repo:"
echo $(git show -s --format=%H) '(main)'
echo "Sub-modules:"
git submodule status | awk '{print $1,$2}'
출력 예:
3a032b0992d7786b00a8822bbcbf192326160cf9 (main)
7de695d58f427c0887b094271ba1ae77a439084f sub-module-1
58f427c0887b01ba1ae77a439084947de695d27f sub-module-2
d58f427c0887de6957b09439084f4271ba1ae77a sub-module-3
파이썬으로 하는 방법(@kenorb의 bash 답변 기반)
def get_git_sha():
# Which branch are we on?
branch = open(".git/HEAD", "r").read()
# Parse output "ref: refs/heads/my_branch" -> my_branch
branch = branch.strip().split("/")[-1]
# What's the latest commit in this branch?
return open(f".git/refs/heads/{branch}").read().strip()
다른 직접 액세스 구현은 다음과 같습니다.
head="$(cat ".git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
head="$(cat ".git/${head#ref: }")"
done
이는 로컬 패키지 보관소에 유용한 http에서도 작동합니다(공용 웹 사이트의 경우 .git 디렉토리에 액세스하는 것이 권장되지 않습니다).
head="$(curl -s "$baseurl/.git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
head="$(curl -s "$baseurl/.git/${head#ref: }")"
done
여기 그것을 하는 다른 방법이 있습니다 :)
git log | grep -o '\w\{8,\}' | head -n 1
echo "현재 분기에 대한 마지막 commit id# 인쇄:"
git reflog
나는 가장 최근의 약속을 원했습니다.origin/main
내가 사용하는 브랜치
git ls-remote origin | grep main$ | cut -f 1
언급URL : https://stackoverflow.com/questions/949314/how-do-i-get-the-hash-for-the-current-commit-in-git
'prosource' 카테고리의 다른 글
열의 각 고유 값에 대해 첫 번째 행만 선택하는 방법은 무엇입니까? (0) | 2023.04.28 |
---|---|
Python을 통해 Excel 매크로를 실행하시겠습니까? (0) | 2023.04.28 |
성능 측면:WPF 애플리케이션이 전자 애플리케이션보다 현명하게 코딩되는 것이 더 낫습니까? (0) | 2023.04.28 |
AAD에 Azure 응용 프로그램이 등록되지 않았습니다. (0) | 2023.04.28 |
키를 기준으로 사전 정렬 (0) | 2023.04.28 |