n个git分支之间的关系

38

如果我有n个git分支,如何轻松地展示这些分支之间的关系?

我想看到存储库中所有分支的子集的树形结构。但我不想看到所有中间提交。

例如:我的存储库看起来像这样:

     o---o--o A
    /      /
o--o--o--o--o--o B
 \  \        \
  \  o--o C   \
   \     \     \
    o--o--o--o--o--o D

但可能会更加复杂。现在我想看到分支A、C和D之间的关系。类似于:

     o A
    /
o--o--o
   \   \
    o---o C
         \
          o--o D

或者一个相应的概览。这是否可能,如何做到?(一个图形工具就可以了。)

解决方案

根据Antoine Pelisses的回答,下面的代码行似乎可以(几乎)完全满足我的要求:

git log --graph --decorate --oneline --simplify-by-decoration A B C

更新

在下面的回答中,Mark Longair指出 gitk 接受与git rev-list相同的参数,因此可以进行以下操作:

gitk --simplify-by-decoration A C D
2个回答

51

你可以试一试这个:

git log --graph --all --decorate --simplify-by-decoration

它只会显示分支头或已标记的提交。


2
这看起来非常不错。添加 --oneline 有点帮助我。现在如果我只能选择所有分支的子集就好了。 :) - Bjarke Freund-Hansen
6
你可以这样做 - 将“--all”改为“A C D”。 - Mark Longair
@Mark:谢谢,显然。:) git log --graph --decorate --oneline --simplify-by-decoration A B C 看起来正是我想要的。 - Bjarke Freund-Hansen
1
@bjarkef:确实 - 我不知道 --simplify-by-decoration,但它非常好(+1) - Mark Longair
1
@Dolphin:你需要创建一个别名(请查看此页面:http://www.git-scm.com/docs/git-config)。 - Antoine Pelisse

20

我会使用:

gitk A C D

可能还有其他的Git GUI能够更好地呈现提交图,但是我发现对于这个目的来说gitk已经足够了,所有的分支和标签都是以“伦敦地铁图”样式表示的:

一张展示了合并和分支的gitk截图
(来源:mythic-beasts.com上的mark)


你也可以使用--simplify-by-decoration选项来运行gitk,因为它理解所有git rev-list的参数,例如:

gitk --simplify-by-decoration A C D

使用 --simplify-by-decoration 选项的 gitk 截图


我也经常使用gitk(和gitg)。然而,我有一个情况,其中我有大约5个分支,每个分支上都有几百个提交,并且在它们之间的某个地方有这些分支之间的合并。使用gitk(或gitg)很难获得合并历史的概述。 - Bjarke Freund-Hansen
2
好的,我认为如果情况非常复杂,我可能会关心一个特定分支是否已经合并到另一个分支,并使用命令行工具来探索这一点。我想有人可能已经删除了你的问题上建议使用git branch --contains C来完成此操作的评论,这确实非常有帮助 - 它向您显示所有包含分支C末端(因此包含分支C的完整历史记录)的分支。 - Mark Longair
2
@bjarkef:作为额外的说明,我应该指出你也可以在gitk中使用--simplify-by-decoration选项 - 我已经更新了我的答案并提到了这一点。 - Mark Longair
看起来非常有用,我一定会在周一试试。谢谢。 - Bjarke Freund-Hansen

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