如何知道“git log”提交属于哪个分支?

56

如果我运行git log,有没有可以指定的参数来从输出中判断每个提交属于哪个分支?

编辑:为了澄清,我知道一个提交可能属于两个分支(例如)。我想要的是获取提交在log中所属的最新分支。因此,如果我从master分支创建名为foo的分支,它将属于这两个分支,但我想获取foo

3个回答

90

我认为你正在寻找的是非常有用的命令:

git branch -a --contains <SHA1sum-of-commit>

......这将告诉您包含该提交的每个分支(本地和远程跟踪)。

不幸的是,我认为没有一个git log选项可以为每个提交输出此信息。 使用--all --source接近,但仅显示每个提交中的一个分支。 但是,如果在gitk --all中单击提交,您将看到它列出了该提交所在的每个分支。

然而,您问题的一部分定义不太清晰-您问:

我想要获取提交日志所属的最新分支

我不确定您的意思-“最新分支”可能是(a)创建最近的引用(b)修改最近的引用(c)具有最近提交的分支等等。 也许从提交图中更好地定义您想要的方式。


1
git branch -a --contains 是查看包含特定提交的所有分支(无论有多少个分支)的好方法。如果有超过20个分支,则 gitk --all 不会列出它们,而只会显示:many (22)。另一个解决方案是 git show-branch --all,非常棒,但不幸的是不能处理超过29个分支。 - TachyonVortex
1
也许他的意思是“最近”或“最直接”的分支?这就是我想知道的。就距离而言,从每个命名的引用走到给定的提交。按照最短/最直接的距离顺序列出分支,直到最远。 - void.pointer
只是想说“спасибо!”,感谢--contains - Michael Shigorin

27

使用 git log 命令,你已经可以获取到当前所在分支上的所有提交记录。

如果想查看合并分支的提交记录,可以使用如下命令:

$ git log --pretty=oneline --graph
创建一个日志树并查看一个提交所合并的分支,使用--graph选项可生成提交树,并用--pretty=oneline选项为每个提交生成单行可视化。要将分支(作为引用)添加到日志中,请:
$ git log --all --source --pretty=oneline --graph
显示带有提交的分支:
$ git show-branch

1
嗯,在您的编辑下,也许您想尝试使用 git show-branch 而不是 git log:http://www.kernel.org/pub/software/scm/git/docs/git-show-branch.html - Luwe
1
可以。我能否获取与“show-branch”一起的提交哈希,以便我可以运行两个命令并合并结果?我需要像用户名、日期等在“log”中但不在“show-branch”中的详细信息,除非有一个我可以指定的标志。 - Tower
很遗憾,这似乎不可能通过一行命令实现。我已经检查了show-branch的选项,但列出额外的细节并不在其中。您可能需要创建一个别名(https://git.wiki.kernel.org/index.php/Aliases)或自定义bash脚本来组合结果。 - Luwe
1
@Luwe:正如我在我的答案中所说(比你编辑建议早50分钟),使用--all --source的问题在于提交可能在多个分支上,而--source只显示其中一个。gitk --allgit branch -a --contains <commit>更不容易误导。 - Mark Longair
log --all --source不错,但是show-branch --all非常棒!@Tower 是的,你可以使用--sha1-name选项,在show-branch中获取提交哈希值。 - TachyonVortex
显示剩余6条评论

9

您尝试过使用git log的“--decorate”选项吗?

我在我的.gitconfig文件中有这个别名:

[alias]
        k = log --graph --oneline --abbrev-commit  --decorate

它展示了与gitk相似的图形,分支名称“装饰”在分支上最新提交旁边。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接