从分支获取最新的Git提交哈希的命令


84

如何使用命令行检查特定Git分支的最新提交哈希?


1
签出特定分支后,是否尝试过使用'git log -n 1'?
里克·范·博德格雷夫里克(Rick van Bodegraven)2013年

git log给出本地存储库的哈希值,但是git hub存储库具有新的哈希值。
mbdvg

1
git log -n 1 [branch_name]branch_name(可以是远程或本地分支)是可选的。如果没有branch_name,它将显示当前分支的最新提交。
Rahul Tapali

11
像这样结束投票,SO成为了Wikipedia。
埃里克·沃克

另请参阅此处
拉斐尔2015年

Answers:


59

使用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 2013年

git rev-parse my_branch_namegit log -n 1 my_branch_name | grep commit | awk '{ print $2 }'更简单的答案;将仅输出my_branch_name
betoharres

@ betoharres,OP最初试图确定对远程存储库的提交(不是我们的存储库refs/remotes,而是实际的远程回购)。 git rev-parse branch-name绝对是去当地分支机构的路。
约翰·萨克梅斯特

这仅在的字段中有效,git svn因为会git svn fetch更改git log输出,因此git log不再可用于获取最后的远程git存储库提交哈希。
安德里

@Andry我不确定您的意思。。。我在听您的评论时遇到了麻烦。你能解释更多吗?
John Szakmeister

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
git log -n 1 --pretty = format:“%H”对我来说很完美
Jaro

9
从类似的问题中获取简短的哈希值:'git rev-parse --short --verify my_branch':stackoverflow.com/a/949391/134761
angularsen 2015年

很好,我将其添加到我的.gitconfig文件中,以便可以使用git hash | pbcopy clip ```[alias] hash =“!f(){\ git log -n 1 --pretty = format:”%H“;复制最后一次提交。 \}; f“```
裤子

2

git log -n 1做完一个之后尝试使用git checkout branchname。这显示了最新提交的提交哈希,作者,日期和提交消息。

git pull origin/branchname首先执行一项操作,以确保本地存储库与上游匹配。

如果也许您只想查看本地分支落后于远程分支的提交列表,请执行以下操作:

git fetch origin
git cherry localbranch remotebranch

这将列出您尚未合并到本地分支中的所有提交哈希。


我的要求是检查本地存储库和github存储库的提交哈希是否相同,我们该怎么做?
mbdvg

据我所知,对于相同的提交,本地和远程存储库之间的提交哈希值不可能不同。您是否是说缺少本地存储库(相对于远程存储库)的提交列表?
Rick van Bodegraven

是的,Rick van,有一个不匹配的地方,所以,我想证明本地存储区和github存储区之间存在差异,因此需要一种找出
答案

2

您可以 git fetch nameofremoterepo,然后git log

而我个人gitloggit log --graph --oneline --pretty --decorate --all。试试看,看看是否适合你


而git fetch尚未拉出更改
nglinh

--online是的简写--pretty=oneline --abbrev-commit。但是您也正在使用--pretty它,它会还原--pretty=oneline...我会推荐git log --graph --abbrev-commit --decorate --all
2013年

凉。我没注意到。谢谢!
nglinh 2013年

0

在您写的评论中

我想证明本地和github回购有区别

正如另一个答案中已经提到的那样,您应该先做一个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手册页的摘录

.....
.....
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>
.....
.....
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.