如何使用分支名称显示 git log

Posted

技术标签:

【中文标题】如何使用分支名称显示 git log【英文标题】:How to show git log with branch name 【发布时间】: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 【参考方案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。

以上是关于如何使用分支名称显示 git log的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 PowerShell 提示符中显示我当前的 git 分支名称?

如何让 git bash 在子模块中显示分支名称

如何运行 git log 以仅查看特定分支的更改?

git提交分支代码发现写错分支名称,如何修改?

sh 如何使用分支名称自动添加git commit

sh 如何使用分支名称自动添加git commit