분기에서 최신 Git 커밋 해시를 가져 오는 명령 [닫힘]


84

특정 Git 브랜치의 최신 커밋 해시를 명령 줄로 어떻게 확인할 수 있습니까?


1
특정 분기를 확인했을 때 'git log -n 1'을 사용해 보셨습니까?
Rick van Bodegraven 2013 년

git log는 로컬 저장소에 해시를 제공하지만 git 허브 저장소에는 새 해시가 있습니다.
mbdvg 2013 년

1
git log -n 1 [branch_name]branch_name (원격 또는 로컬 분기 일 수 있음)은 선택 사항입니다. branch_name이 없으면 현재 분기의 최신 커밋이 표시됩니다.
라훌 Tapali

11
이렇게 마감 될 투표를 통해 SO는 Wikipedia가되고 있습니다.
Eric Walker

답변:


60

사용 git ls-remote git://github.com/<user>/<project>.git. 예를 들어, 내 trac-backlog 프로젝트는 다음을 제공합니다.

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git
5d6a3c973c254378738bdbc85d72f14aefa316a0    HEAD
4652257768acef90b9af560295b02d0ac6e7702c    refs/heads/0.1.x
35af07bc99c7527b84e11a8632bfb396823326f3    refs/heads/0.2.x
5d6a3c973c254378738bdbc85d72f14aefa316a0    refs/heads/master
520dcebff52506682d6822ade0188d4622eb41d1    refs/pull/11/head
6b2c1ed650a7ff693ecd8ab1cb5c124ba32866a2    refs/pull/11/merge
51088b60d66b68a565080eb56dbbc5f8c97c1400    refs/pull/12/head
127c468826c0c77e26a5da4d40ae3a61e00c0726    refs/pull/12/merge
2401b5537224fe4176f2a134ee93005a6263cf24    refs/pull/15/head
8aa9aedc0e3a0d43ddfeaf0b971d0ae3a23d57b3    refs/pull/15/merge
d96aed93c94f97d328fc57588e61a7ec52a05c69    refs/pull/7/head
f7c1e8dabdbeca9f9060de24da4560abc76e77cd    refs/pull/7/merge
aa8a935f084a6e1c66aa939b47b9a5567c4e25f5    refs/pull/8/head
cd258b82cc499d84165ea8d7a23faa46f0f2f125    refs/pull/8/merge
c10a73a8b0c1809fcb3a1f49bdc1a6487927483d    refs/tags/0.1.0
a39dad9a1268f7df256ba78f1166308563544af1    refs/tags/0.2.0
2d559cf785816afd69c3cb768413c4f6ca574708    refs/tags/0.2.1
434170523d5f8aad05dc5cf86c2a326908cf3f57    refs/tags/0.2.2
d2dfe40cb78ddc66e6865dcd2e76d6bc2291d44c    refs/tags/0.3.0
9db35263a15dcdfbc19ed0a1f7a9e29a40507070    refs/tags/0.3.0^{}

필요한 것을 grep하고 잘라내십시오.

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git | \
   grep refs/heads/master | cut -f 1
5d6a3c973c254378738bdbc85d72f14aefa316a0

또는 명령 줄에서 원하는 참조를 지정하고 다음을 사용하여 grep을 피할 수 있습니다.

:: git ls-remote git://github.com/jszakmeister/trac-backlog.git refs/heads/master | \
   cut -f 1
5d6a3c973c254378738bdbc85d72f14aefa316a0

참고 : git://URL 이 아니 어도됩니다. 이 수 https://또는 git@github.com:너무.

원래 이것은 원격 브랜치의 최신 커밋 (마지막 페치뿐만 아니라 원격 저장소의 브랜치에있는 실제 최신 커밋)을 찾는 데 맞춰졌습니다. 로컬에서 커밋 해시가 필요한 경우 가장 좋은 대답은 다음과 같습니다.

git rev-parse branch-name

빠르고 쉬우 며 단일 명령입니다. 현재 분기에 대한 커밋 해시를 원하면 HEAD를 볼 수 있습니다.

git rev-parse HEAD

4
더 많은 사랑을받을 자격이 있습니다. 이것은 아름답게 작동합니다.
SuperFamousGuy

git rev-parse my_branch_name또는 git log -n 1 my_branch_name | grep commit | awk '{ print $2 }'더 간단한 대답; 의지의 출력은 마지막이의 해시 커밋my_branch_name
betoharres

@betoharres OP는 원래 원격 저장소에서 커밋을 결정하려고 시도했습니다 (우리가 가지고있는 refs/remotes것이 아니라 실제 원격 저장소). git rev-parse branch-name확실히 지역 지점으로가는 길입니다.
존 Szakmeister

이것은 출력을 변경 git svn하기 때문에 필드에서만 작동 하므로 더 이상 마지막 원격 git 저장소 커밋 해시 를 얻는 데 사용할 수 없습니다 . git svn fetchgit loggit log
Andry

@Andry 무슨 말인지 잘 모르겠네요 ... 댓글을 팔로우하는 데 문제가 있습니다. 더 설명해 주시겠습니까?
John Szakmeister 19 년

139
git log -n 1 [branch_name]

branch_name(원격 또는 로컬 지점 일 수 있음)은 선택 사항입니다. 를 사용하지 않으면 branch_name현재 브랜치의 최신 커밋이 표시됩니다.

예를 들면 :

git log -n 1
git log -n 1 origin/master
git log -n 1 some_local_branch

git log -n 1 --pretty=format:"%H"  #To get only hash value of commit

20
자식 로그 -n 1 --pretty = 형식 : 나를 위해 완벽 "%의 H"일
JARO

9
짧은 해시 가져 오기 : 'git rev-parse --short --verify my_branch'유사한 질문 : stackoverflow.com/a/949391/134761
angularsen

좋아, 나는 이것을 .gitconfig에 추가하여 git hash | pbcopy clip ```[alias] hash = "! f () {\ git log -n 1 --pretty = format :"% H "; \}; f "```
Pants

2

사용해보십시오 git log -n 1을 수행 한 후 git checkout branchname. 이것은 최근 커밋에 대한 커밋 해시, 작성자, 날짜 및 커밋 메시지를 보여줍니다.

수행 git pull origin/branchname반드시 해당 지역의 repo 일치 상류하기 위해, 먼저.

로컬 브랜치가 원격 브랜치 뒤에있는 커밋 목록 만보고 싶다면 다음과 같이하십시오.

git fetch origin
git cherry localbranch remotebranch

이렇게하면 아직 로컬 브랜치에 병합하지 않은 커밋의 모든 해시가 나열됩니다.


내 요구 사항은 로컬 리포지토리와 github 리포지토리 커밋 해시가 동일하거나 동일하지 않은지 확인하는 것입니다. 어떻게 할 수 있습니까?
mbdvg 2013 년

내가 아는 한, 동일한 커밋에 대해 커밋 해시가 로컬 저장소와 원격 저장소간에 다를 수있는 방법은 없습니다. 로컬 저장소가 원격 저장소에 비해 누락 된 커밋 목록을 의미 했습니까?
Rick van Bodegraven 2013 년

예 Rick van, 불일치가 있습니다. 로컬 및 github repo에 차이가 있음을 보여주고 싶습니다. 알아낼 방법이 필요합니다
mbdvg

2

할 수 있습니다 git fetch nameofremoterepo.git log

개인적 gitlog으로 git log --graph --oneline --pretty --decorate --all. 시도해보고 그것이 당신에게 맞는지 확인하십시오


그리고 git fetch는 아직 변경 사항을 가져 오지 않습니다
nglinh

--online--pretty=oneline --abbrev-commit. 하지만 당신이 사용하고 --pretty있는 되돌립니다뿐만 아니라 --pretty=oneline... 내가 추천 할 것입니다 git log --graph --abbrev-commit --decorate --all대신.
Felix Kling 2013 년

멋있는. 나는 그것을 몰랐다. 감사!
nglinh 2013 년

0

당신이 쓴 코멘트에서

로컬과 github repo에 차이가 있음을 보여주고 싶습니다.

다른 답변에서 이미 언급했듯이 git fetch origin먼저 해야합니다 . 그런 다음 원격이 현재 분기보다 앞서 있으면 다음을 사용하여 로컬 분기와 원격 간의 모든 커밋을 나열 할 수 있습니다.

git log master..origin/master --stat

현지 지점이 앞서있는 경우 :

git log origin/master..master --stat

--stat 변경된 파일 목록도 표시됩니다.

추가 및 삭제를 명시 적으로 나열하려면 git diff다음을 사용하십시오 .

git diff master origin/master

0

"git log -n 1 [branch_name]"옵션을 사용할 때 유의하십시오. -n은 한 줄의 로그 만 반환하지만 반환되는 순서는 보장되지 않습니다. 다음은 git-log man 페이지에서 발췌 한 것입니다.

.....
.....
Commit Limiting

Besides specifying a range of commits that should be listed using the special notations explained in the     description, additional commit limiting may be applied.

Using more options generally further limits the output (e.g. --since=<date1> limits to commits newer than <date1>, and using it with --grep=<pattern> further limits to commits whose log message has a line that matches <pattern>), unless otherwise noted.

Note that these are applied before commit ordering and formatting options, such as --reverse.

-<number>
-n <number>
.....
.....
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.