回答
你的问题很可能源于对Git工作方式的误解。
在Git中,分支仅仅是指向提交的指针。删除分支可能会导致提交无法访问(在这种情况下,它们不会出现在您的GitHub图表上),但前提是提交的问题不是而是包含在任何其他现有引用(分支或标记)的血统中。此外,仅当这些对象是无法访问时,才会应用垃圾收集/修剪提交对象。
在这种情况下,根据你的截图,回购看起来(之前的testmerge
删除)如下:
-- A ----------- E [development]
\ /
B -- C -- D [testmerge]
注意,提交B
,C
和D
,特别是从testmerge
可达;换句话说,它们包含在分支testmerge
(提交D
)的小费的血统中。然而,他们也是分支development
(承诺E
)的小费的祖先。由于这三个提交可达来自development
,删除testmerge
不会让他们“走”:
-- A ----------- E [development]
\ /
B -- C -- D
而且因为这些提交依旧可达(从development
),运行Git的垃圾回收机制将不会影响他们。
很好的答案。我会添加一个小的excurse合并提交在git中;说多个父母,这使得有问题的提交仍然可以访问。 – 2015-02-24 14:59:33
@Zeeker谢谢。我不知道; OP似乎知道什么是合并。我会等到他/她看到这个答案时,我会在需要时扩展它。 – Jubobs 2015-02-24 15:14:33
只要开发分支是活的(或合并到另一个活分支中,或作为标记历史记录的一部分),那些提交将永远不会被删除。
原因是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?
此外,如果这是不可取的,考虑重订和挤压你的在未来进行快速合并之前分支到单个提交。
请小心这种情况。你应该在这方面写下“头”(或“小费”),而不是“头”。 – Jubobs 2015-02-24 14:43:02
- 1. PromiseKit分支承诺
- 2. 蓝鸟承诺并抓分支
- 3. 取消合并分支,保留合并后提交
- 4. 承诺数减少后重新分配功能分支主
- 5. 处理具有承诺的分支
- 6. 管理分支机构和承诺
- 7. 混合firebase承诺与ES6承诺
- 8. setTimeout并承诺
- 9. 嵌套承诺滞留
- 10. SourceTree失去了所有分支机构并承诺
- 11. “目前未对任何分支”后做一个承诺
- 12. svn分支合并分支
- 13. 链接承诺内的承诺然后()
- 14. 承诺呼叫与承诺分辨
- 15. 将开发分支合并到我的分支中,同时保留合并到主分支的选项
- 16. 合并rebase导致承诺被覆盖
- 17. 未合并否认提交承诺
- 18. Git:在合并分支上工作,之后没有合并
- 19. 使用然后()在承诺
- 20. VSTS合并的Git分支孙子到主后子分支已合并到主
- 21. 分支之后失去了合并
- 22. git:合并后更新2分支
- 23. 分支壁球合并为主,并合并回分支
- 24. 在Mercurial中合并分支
- 25. 如何合并分支并保留作者身份
- 26. 拆分分支在两个分支/合并分支有选择
- 27. 当我们在其他分支合并分支,然后任一本地分支合并或远程分支合并
- 28. 合并Subversion分支
- 29. LibGit2Sharp - 合并分支
- 30. 合并分支'主'
我没有得到你的问题,你的期望是什么? – dsharew 2015-02-24 14:24:12
ehm ...你原来的问题是:*为什么会发生这种情况*?现在你问:*我该怎么做?*。这是不好的礼节。做正确的事情,而不是编辑你的问题和移动门柱,将接受下面的答案(如果其中一个回答你的原始问题到你满意),并提出一个*新问题。 – Jubobs 2015-02-24 17:18:04
您可以将问题恢复到您的修改并停止修改您的评论。那时我会接受你的回答。 – autodidacticon 2015-02-24 17:19:54