【问题标题】:Command to get latest Git commit hash from a branch从分支获取最新 Git 提交哈希的命令
【发布时间】:2013-03-18 15:09:07
【问题描述】:

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

【问题讨论】:

  • 您在签出特定分支时是否尝试过使用“git log -n 1”?
  • git log 给出本地存储库哈希,但 git hub 存储库有新哈希。
  • git log -n 1 [branch_name] branch_name(可以是远程或本地分支)是可选的。如果没有 branch_name,它将显示当前分支的最新提交。
  • 使用:git rev-parse [branch_name]
  • “离题”如何解决这个好问题?

标签: git github


【解决方案1】:

除了上面 John Szakmeister 的出色回答 (https://stackoverflow.com/a/15679887/4597676) 之外,您还可以通过将 git rev-parse BRANCHNAME 的输出传送到类似 pbcopy 或类似命令的命令来执行此操作而无需触摸鼠标:

【讨论】:

    【解决方案2】:

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

    或者,您可以在命令行上指定您想要的 refs 并避免使用 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
    

    【讨论】:

    • 值得更多的爱。这很好用。
    • git rev-parse my_branch_name OR git log -n 1 my_branch_name | grep commit | awk '{ print $2 }' 更简单的答案;将仅输出 my_branch_name 的最后一个提交哈希
    • @betoharres OP 最初试图确定远程存储库上的提交(不是我们在refs/remotes 中的内容,而是实际的远程存储库)。 git rev-parse branch-name 绝对是当地分支机构的最佳选择。
    • 这仅适用于git svn 的字段,因为git svn fetch 更改了git log 输出,因此git log 不再可用于获取最后一个remote i> git 存储库提交哈希。
    • @Andry 我不确定你的意思......我在关注你的评论时遇到了麻烦。你能解释更多吗?
    【解决方案3】:

    你可以git fetch nameofremoterepo,然后git log

    就我个人而言,我将gitlog 别名为git log --graph --oneline --pretty --decorate --all。试试看是否适合你

    【讨论】:

    • 而且 git fetch 还没有拉取更改
    • --online--pretty=oneline --abbrev-commit 的简写。但是你也在使用--pretty,它会恢复--pretty=oneline...我会推荐git log --graph --abbrev-commit --decorate --all
    • 酷。我没有注意到这一点。谢谢!
    【解决方案4】:
    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
    

    【讨论】:

    • git log -n 1 --pretty=format:"%H" 非常适合我
    • 从类似的问题中获取简短的哈希:'git rev-parse --short --verify my_branch':stackoverflow.com/a/949391/134761
    • 很好,我将它添加到我的 .gitconfig 中,这样我就可以使用 git hash | pbcopy clip ``` [alias] hash = "!f(){\ git log -n 1 复制最后一次提交--pretty=format:"%H";\ }; f" ```
    【解决方案5】:

    在执行git checkout branchname 之后尝试使用git log -n 1。这显示了最新提交的提交哈希、作者、日期和提交消息。

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

    如果您只想查看本地分支在远程分支上的提交列表,请执行以下操作:

    git fetch origin
    git cherry localbranch remotebranch
    

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

    【讨论】:

    • 我的要求是检查本地存储库和github存储库提交哈希是否相同,我们该怎么做?
    • 据我所知,对于相同的提交,本地和远程仓库之间的提交哈希不可能不同。您是否可能是指本地存储库与远程存储库相比缺少提交列表?
    • 是的 Rick van ,有一个不匹配,所以,我想表明本地和 github repo 存在差异,所以需要一种方法来找出
    【解决方案6】:

    请注意,使用“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>
    .....
    .....
    

    【讨论】:

      【解决方案7】:

      在你写的评论中

      我想表明本地和 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-04
        • 1970-01-01
        • 2021-06-13
        • 2015-06-24
        • 2016-04-03
        • 2014-10-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多