【问题标题】:How to show git log with branch name如何使用分支名称显示 git log
【发布时间】:2012-12-06 22:08:45
【问题描述】:

我尝试git log--decorate--source 选项。但是还是获取不到commit2f3cb60d7e7776的分支名,为什么?

#git log 2f3cb60 --graph  --decorate --source --all --oneline
...
* | | | 1920ad5 refs/heads/gpio support gpio lib
| |/ /
|/| |
* | | 2f3cb60   2f3cb60 fix
* | | d7e7776   2f3cb60 fix
| |/
|/|
* | aa4dcfb     refs/remotes/origin/httpd support
* | cfc839d     refs/remotes/origin/httpd add folder

如何显示带有分支名称的 git log?

【问题讨论】:

  • 上面的 ... 显示了这两个“修复”提交所在的分支,如果你按照图表向上的话。
  • 你可能想试试--branches而不是--all

标签: git git-branch git-log


【解决方案1】:
$ git log --graph --decorate --oneline
* 1f3e836 (HEAD, origin/v2, v2) Change scripts to new format.
*   34d458f (origin/master, master) Merge branch 'new-shell'
|\  
| * 995ece7 (origin/new-shell) Fix index.html and add script pushing.
| * fe0615f New shell hello-world.
|/  
* fe1b1c0 Progress.
...

git log --graph --decorate --oneline 应该向您显示具有名称的提交的名称。 并非每个提交都与分支名称相关联。

请记住,分支名称只是指向特定提交的指针。每个提交都有一个父提交,因此一个提交可能是十几个独立分支历史的一部分。

  • 您可以通过git branch --contains <ref>查看哪些分支包含提交。
  • 如果您只需要某种符号名称来跟踪提交,请使用 git name-rev <ref>
  • 如果您需要包含提交的所有分支的 shell 脚本 ("plumbing") 列表,请尝试以下操作:

    commit=$(git rev-parse <ref>) # expands hash if needed
    for branch in $(git for-each-ref --format "%(refname)" refs/heads); do
      if git rev-list "$branch" | fgrep -q "$commit"; then
        echo "$branch"
      fi
    done
    

另见:SO: Finding what branch a commit came from

【讨论】:

  • 简单的git branch --contains &lt;ref&gt; 怎么样? COMMIT= ... for ... done shell 脚本有哪些 git branch --contains 没有的功能?
  • @Colin git branch --contains 太棒了!这就是为什么它是我列出的三个选项中的第一个项目符号。 :) 问题是git branch 没有保证输出——它可能会在未来的版本中改变格式——所以你可能不想在长期存在的脚本中使用它。这是plumbing vs porcelain 分离的一部分:如果您是阅读输出的人,您可以使用像git branch 这样的瓷器命令,但是如果您正在编写一个工具,您将需要使用像for-each-ref 这样的管道命令和rev-list 保证它们的输出格式。
  • @JeffBowman 感谢您指出这一点,我忽略了您的评论“如果您需要 shell 脚本...”。如果git branch 有一个--porcelain 选项来简化这一点,那就太好了,但感谢脚本 sn-p!
  • @JeffBowman 为什么是Not every commit is associated with a branch name?我的理解是,当我们提交时,我们提交到一个特定的分支,并且该分支应该是与提交相关联的分支,对吗?
  • @QiZhang 一个分支是一个指向提交的自动前进指针:当你提交时,它可能会进入一个分支,是的,但那是暂时的。您可以将分支重置为指向您想要的任何提交,并且您提交时所在的分支不是提交的永久部分,除非您自己将其写在提交日志中。一个提交可能一次与多个分支关联,或者根本没有关联,对于大多数您关心的提交,它可能是一个或多个分支的父级或祖先,所以您有several names you can use
猜你喜欢
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-12
相关资源
最近更新 更多