我决定在#git上确认剩余的分支不是真正必要之后,从我的(个人项目)存储库中删除了一些已经合并到master
的分支。
但是,gitk对我的存储库历史的可视化已经完全搞砸了。
基本上是这样的:
http://i48.tinypic.com/90r512.png http://i48.tinypic.com/90r512.png
来自提交的那些分支突然出现,最终会回到其他一些提交中。所有点都没有合并,我只有5个额外的分支。
这是正常的吗?有没有解决这个问题?
答案 0 :(得分:4)
您是否尝试重新装入显示器?有时gitk有点困惑,但是退出并重新启动它,或重新加载(文件&gt; 重新加载,或 Ctrl - F5 < / kbd>)可以帮助它以更友好的方式重新绘制历史。
编辑:现在我看到了存储库,我可以看到发生了什么。
看起来你在master上做了一些开发,同时也在一些分支机构上工作。在执行此操作时,您将master
多次合并到这些侧分支中。 gitk
在列表中显示提交,因此需要提交的线性排序。每当您有分支历史记录时,您可以将该历史记录放入几种可能的线性排序。例如,以下结构:
/-- c -- e --\
a -- b g -- h
\-- d -- f --/
可以通过以下任何一种方式订购:
默认情况下,gitk
使用拓扑排序,尝试将每个分支上的提交组合在一起,这样您就可以看到每个分支的提交的逻辑进展,而不是基于散布的分支的每一侧的提交他们什么时候发生的。因此,例如,它可能会在排序(1)中显示它们:
a -- b -- c -- e ------------ g -- h
\----------- d -- f --/
如果您只是查看线性日志,这种顺序可以正常工作,如果您不经常在分支之间进行合并,那么在gitk
中也可以正常工作(如给出的示例中所示)。但是如果你做了你所做的事情,经常将master
合并到主题分支中,那么就会产生你所看到的那种混乱;首先显示master
上的提交,然后显示侧枝上的提交,但master
频繁合并到侧枝中会成为堆积起来的长连接,使历史看起来令人困惑。 (请注意,Git实际上并不存储哪个提交来自哪个分支,但是它对它们进行排序的方式最终将每个分支的提交保持在一起,显示出来。)
我所知道的解决这个问题的最简单方法就是按时间顺序显示gitk
中的提交。打开查看&gt; 修改视图... ,然后选中严格按日期排序选项。现在您应该看到您的历史显示得更加清晰。要直接启动此视图,您可以将--date-order
选项传递到gitk
。
答案 1 :(得分:1)
我不知道您的历史记录是什么样的,但要记住:删除合并的分支只会删除名称(引用),而不是提交,也不会删除历史记录的任何部分。
因此,可视化历史记录的工具仍将显示过去发生的所有分支。
答案 2 :(得分:0)
分支只有当你有不同的头从根指向时(如在树中),而不是当你有n行回到主分支时(合并的牧场与它被合并的分支没有真正不同)。检查gitk --all
以查看存储库中的所有分支(作为指向每个分支头部的颜色标签)。并仔细检查gitk显示的合并点,如果有两个父母,那么它们是真正的合并。 git log --graph
可以帮助您发现它不是gitk的问题。