2015-02-24 67 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