2015-02-24 66 views
2

考虑以下合并删除背后:承诺留在分支合并后

merged code

删除“testmerge”分支后,其提交留在后面。

deleted branch

是那些提交以往任何时候都将被删除(垃圾收集)?远程修剪似乎并没有删除它们...

+0

我没有得到你的问题,你的期望是什么? – dsharew 2015-02-24 14:24:12

+0

ehm ...你原来的问题是:*为什么会发生这种情况*?现在你问:*我该怎么做?*。这是不好的礼节。做正确的事情,而不是编辑你的问题和移动门柱,将接受下面的答案(如果其中一个回答你的原始问题到你满意),并提出一个*新问题。 – Jubobs 2015-02-24 17:18:04

+0

您可以将问题恢复到您的修改并停止修改您的评论。那时我会接受你的回答。 – autodidacticon 2015-02-24 17:19:54

回答

4

你的问题很可能源于对Git工作方式的误解。

在Git中,分支仅仅是指向提交的指针。删除分支可能会导致提交无法访问(在这种情况下,它们不会出现在您的GitHub图表上),但前提是提交的问题不是而是包含在任何其他现有引用(分支或标记)的血统中。此外,仅当这些对象是无法访问时,才会应用垃圾收集/修剪提交对象。

在这种情况下,根据你的截图,回购看起来(之前的testmerge删除)如下:

-- A ----------- E [development] 
    \   /
    B -- C -- D [testmerge] 

注意,提交BCD,特别是从testmerge可达;换句话说,它们包含在分支testmerge(提交D)的小费的血统中。然而,他们也是分支development(承诺E)的小费的祖先。由于这三个提交可达来自development,删除testmerge不会让他们“走”:

-- A ----------- E [development] 
    \   /
    B -- C -- D 

而且因为这些提交依旧可达(从development),运行Git的垃圾回收机制将不会影响他们。

+1

很好的答案。我会添加一个小的excurse合并提交在git中;说多个父母,这使得有问题的提交仍然可以访问。 – 2015-02-24 14:59:33

+1

@Zeeker谢谢。我不知道; OP似乎知道什么是合并。我会等到他/她看到这个答案时,我会在需要时扩展它。 – Jubobs 2015-02-24 15:14:33

2

只要开发分支是活的(或合并到另一个活分支中,或作为标记历史记录的一部分),那些提交将永远不会被删除。

原因是git提交实际上是对象,每个对象都有对存储库当前状态的引用,作者和提交者信息,提交信息,当然还有父提交或提交(在合并的情况下提交)

由于开发分支上的HEAD提交引用了testmerge分支的前HEAD提交,因此该分支“保持活动”。

上的Git对象的引用,你可能会发现有用: http://git-scm.com/book/en/v2/Git-Internals-Git-Objects

您还可能有兴趣在周围修剪历史上的各种问题: How do I remove the old history from a git repository?

此外,如果这是不可取的,考虑重订和挤压你的在未来进行快速合并之前分支到单个提交。

+0

请小心这种情况。你应该在这方面写下“头”(或“小费”),而不是“头”。 – Jubobs 2015-02-24 14:43:02