2017-01-26 138 views
0

我不只是在談論分支指針:-)我可以從git倉庫中刪除整個分支嗎?

說我有一個已經完全合併的分支,現在我想讓它看起來像分支從來不存在。在我看來,我應該能夠在不犧牲完整性的情況下,徹底刪除回購協議中的分支(即刪除該分支上的所有提交,使其從不顯示在歷史記錄中)。有沒有辦法做到這一點?

是否有可能將剩餘的分支推向上游而不推動那個我寧願忘記的分支?

編輯:我已經在例如添加,試圖說明這個更好

git checkout master 
git commit -m "C1" 
git branch b1 
git commit -m "C2" 
git checkout b1 
git commit -m "C3" 
git checkout master 
git merge -m "C4" b1 
git branch -d b1 

恰好給出了這樣的結果

--C1--+----C2----+--C4 
     \  /
     +--C3--+ 

我想要做的就是刪除C3但留下C4,因爲它是,所以歷史看起來是線性的。在我看來,C4的sha-1將會是相同的,無論C3是否存在,所以我不明白爲什麼我需要rebase /櫻桃選擇做它

+0

你知道一個分支是一個指針。假設你有兩個名字,湯姆和傑克。你是承諾,傑克和湯姆是兩個分支。如果一個人刪除了Jack的名字並且修剪了你的提交,Tom會發生什麼? – ElpieKay

回答

-1

您是否嘗試過使用:

$git branch -d

2

是的,有可能完全刪除了一個分支:

git branch -D branchname 
git push origin :branchname 

-D是力刪除連科並沒有合併的分支。

+0

在我看來,這只是刪除分支指針。我想刪除實際的分支本身(即所有在那個分支上的提交) – Andy

+0

@Andy如果你刪除了分支,並且提交沒有被任何其他的ref(branch,tag ...)指向,那麼垃圾收集器將清除它們。如果他們被其他參考文獻引用,則不能在不犧牲完整性的情況下襬脫它們。 –

+0

@安迪,實際上它刪除了不是指針的分支。就像Dan Lowe所說,如果分支的某些提交也作爲其他分支的一部分,那麼您不能刪除這些提交。 –

0

你可以做到這一點使用下面的命令:在每個命令

git branch -D branchname. 
git reflog expire --expire=now --all 
git gc --aggressive --prune=now 
git repack -a -d -l 

更多信息,請訪問git的文檔:https://git-scm.com/docs