删除git中的分支导致gitk变得疯狂

时间:2010-02-02 06:55:35

标签: git gitk

我决定在#git上确认剩余的分支不是真正必要之后,从我的(个人项目)存储库中删除了一些已经合并到master的分支。

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

基本上是这样的:

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

来自提交的那些分支突然出现,最终会回到其他一些提交中。所有点都没有合并,我只有5个额外的分支。

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

3 个答案:

答案 0 :(得分:4)

您是否尝试重新装入显示器?有时gitk有点困惑,但是退出并重新启动它,或重新加载(文件&gt; 重新加载,或 Ctrl - F5 < / kbd>)可以帮助它以更友好的方式重新绘制历史。

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

看起来你在master上做了一些开发,同时也在一些分支机构上工作。在执行此操作时,您将master多次合并到这些侧分支中。 gitk在列表中显示提交,因此需要提交的线性排序。每当您有分支历史记录时,您可以将该历史记录放入几种可能的线性排序。例如,以下结构:

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

可以通过以下任何一种方式订购:

  1. a,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
  7. 默认情况下,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的问题。