可视化git日志树时如何指定最左侧(感兴趣的主要分支)?

时间:2018-07-27 07:51:39

标签: git user-interface tree git-log

我正在使用Sourcetree,但在其他Git GUI工具中也遇到了同样的问题,所以我不确定是否有任何工具可以满足我的需要。

该问题的主要原因是,有时我需要查看特定的发行版本分支,并查看所有其他分支以及所有与所关注分支相关的提交。

当前,它会引起混乱,因为即使我检查了分支,树形可视化视图中也没有将其显示为直线,这使得跟踪该分支何时以及为何拆分或合并变得很复杂。如果我可以将特定的分支看作一条垂直的垂直线,而所有其他分支都围绕该分支布置,那就容易得多。

例如,我有一个分支A,然后在其上创建了一个分支B,然后将某些内容提交到B中,然后又将其他内容提交到A中。当我查看日志时,我希望能够指定分支A为我的分支注意,因此分支A(而非分支B)应显示为直线。但是目前我不知道该怎么做-似乎,Git(或Sourcetree)决定哪个分支将显示为一条直线(最有可能是最新提交的分支?),以及将显示哪个分支从当前选择的“主分支”中分离出来。

1 个答案:

答案 0 :(得分:1)

由于Git商店使用 D 替代的 A 循环 G raph或DAG进行提交,因此您在这里拥有的实际上是{{3} }。有各种有用的外部程序,例如graph (DAG) visualization problem,但是所有这些都是外部工具,不是内置于Git的,因此您必须在这里自己做一些工作。另请参见Graphviz

这里有第二个问题。当您将提交视为在某个分支上时,您可能会认为,如果在分支 B 上进行了 made 提交,则它们“属于”分支 B < / em>。在Mercurial中是正确的,但在Git中却是令人痛苦的错误。任何给定的提交都在“ 所有”分支上,而该提交从这些分支可达,其中可达性是一个技术术语(请参见Pretty git branch graphs可达性问题)。这最终对您的问题意味着什么,就是没有可靠的方式来识别“主线”。如果您所有的程序员在进行合并时都非常谨慎,则可以在合并提交时使用Git的第一个父项属性来标识此主行,但是如果有人使用过git pull,他们将创建有人称Think Like (a) Git,与主线概念混为一谈。

每个Git图形绘制工具(例如Git-GUI或gitk或SourceTree)都有自己的方法来枚举图形中的提交,因此每种工具都有其自己的绘制DAG的方式。对于git log --graph(这很粗糙)来说,Foxtrot Merges很有趣,但是请注意,当使用--graph时,git log 更改原来是“最新的”到“拓扑”的。大多数图形绘制程序都必须进行某种拓扑排序,以最大程度地减少线的交叉。

最后,您可能会发现git log --graph --branches --tags --decorate --simplify-by-decoration可以为您提供90%以上的所需资源,而您基本上不需要付出任何努力。 “通过修饰来简化”模式告诉git log丢弃所有未标记(没有分支或标签名称)且不需要的提交( )。显示图形结构。因此,您将获得分叉点和合并点,因为结构需要它们,再加上分支和标签的名称,即使线条不是很直,也可以显示出不错的“大图”图形。 >