在git中删除分支导致gitk疯狂

问题描述:

我确定在#git上确认剩余分支并不是真的必要后,从我的(个人项目)存储库中删除几个分支,这些分支合并到master中。在git中删除分支导致gitk疯狂

但是,gitk对我的存储库历史记录的可视化已经完全搞砸了。

基本上是这样的:

http://i48.tinypic.com/90r512.png http://i48.tinypic.com/90r512.png

与犯下出现无处最终将返回到一些其他的承诺了未来这些分支。所有点都没有发生合并,而且我只有大约5个额外的分支。

这是正常的吗?有没有解决这个问题?

您是否尝试重新加载显示器?有时gitk变得有点困惑,但退出并重新启动它,或重装(文件>刷新,或按Ctrl - F5)能帮助它重新绘制历史更友好的方式。

编辑:现在,我看到存储库,我可以看到发生了什么。

看起来你在master上做了一些开发,同时也在一些分支上工作。当你这样做时,你会将master合并到这些支路中几次。 gitk在列表中显示提交,所以它需要提交的线性顺序。只要你有分支的历史,有几个可能的线性排序,你可以把这段历史在例如,以下结构:

 /-- c -- e --\ 
a -- b    g -- h 
     \-- d -- f --/ 

可以下令以下任何一种方式:

  1. 一b,c,e,d,f,g,h
  2. a,b,c,d,e,f,g,h
  3. a,b,c,d,f,e,g,h
  4. a,b,d,c,e,f,g,h
  5. 的a,b,d,C,F,E,G,H
  6. 的a,b,d,F,C,E,G,H

默认情况下,gitk使用拓扑顺序,其试图在每个分支上对提交进行分组,所以您可以看到每个分支的提交的逻辑进程,而不是根据分支发生的时间穿插分支的每一侧的提交。所以,举例来说,它可能会在订货(1)显示它们:

a -- b -- c -- e ------------ g -- h 
     \----------- d -- f --/ 

这种排序工作正常,如果你只是在寻找一个线性日志,并在gitk也能正常工作,如果你不合并之间分支很多时候(如在给出的例子中)。但是如果你做了你所做的事情,那么经常将master合并成主题分支,那么这会产生你所看到的那种混乱;首先显示master的提交,然后提交侧枝,但master频繁合并到侧枝变成堆积并使历史看起来混乱的长连接。 (请注意,Git实际上并不存储哪个提交来自哪个分支,而是它对它们进行排序的方式,将每个分支的提交保持在一起,就会出现)。

最简单的方法来处理这个,我知道只是按照时间顺序显示提交gitk。打开查看>编辑视图...,并检查严格按日期排序选项。现在你应该看到你的历史显示得更加健全。要直接启动此视图,您可以将--date-order选项传递到gitk

+0

我已经尝试过多次刷新 – unrelativity 2010-02-09 11:24:26

+0

@ a2h为了帮助您,我们需要更多信息。你能否展示更多的历史,包括出现分支和合并的点? – 2010-02-10 03:50:23

+0

有没有什么办法可以在任何时候增加列表的高度? – unrelativity 2010-03-10 09:42:56

只有当你有不同头从根指向(如树中)时,而不是当你有n行回到主分支时(合并的牧场与它合并到的分支没有真正的不同)。检查gitk --all以查看仓库中的所有分支(作为指向每个分支头部的颜色标签)。仔细检查gitk向你展示的合并点,如果这些点有两个父母,那么它们就是真正的合并。 git log --graph可以帮助你看到它不是gitk的问题。

+0

您发布的第二条命令仅显示5次提交..? – unrelativity 2010-02-09 11:31:06

+0

@ a2h你确定吗?你有没有尝试添加'|如果它没有通过寻呼机运行,那么更少?它为我显示完整的存储库图回到初始提交。 – MBO 2010-02-09 22:33:37

我不知道你的历史是什么样子,但要记住的是:删除合并的分支只删除名称(参考),而不是提交或历史的任何部分。

因此,可视化历史记录的工具仍将显示过去发生的所有分支。