如何使用分支名称显示 git log
Posted
技术标签:
【中文标题】如何使用分支名称显示 git log【英文标题】:How to show git log with branch name 【发布时间】:2012-12-06 22:08:45 【问题描述】:我尝试git log
和--decorate
和--source
选项。但是还是获取不到commit2f3cb60
和d7e7776
的分支名,为什么?
#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 <ref>
怎么样? 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的主要内容,如果未能解决你的问题,请参考以下文章