回答
你的問題很可能源於對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