2010-08-11 134 views
3

我有以下混帳回購協議結構:如何刪除沒有指定分支的git提交?

a-b-c-d-.. [master] 
    \ 
    x 

的承諾的X被accidentially完成(無法弄清楚如何),並沒有命名的分支。我怎樣才能刪除這個提交?

對於細節,GIT中日誌示出了該(翻譯從德國回來,遺憾的任何inconvieniances):

Author: ... 
Parents: 8444.. 
Branch: 
Follows up: 
Preceding: 

... 

的提交經由git prune是不可拆卸的。

回答

4

如果x不在任何分支的歷史記錄中,並且沒有簽出,它將自動被git快速刪除。如果您想立即將其刪除,您可以查看git help gc。設置gc.reflogExpireUnreachable爲零,然後做git gc --prune=now可能會做到這一點。

git rebasegit commit --amend,和其他這樣的命令一直留下這種剩菜; git通常在與他們打交道時足夠體面,你不必擔心。

+0

這也非常有用。但是我沒有足夠的聲望來投票你的答案,對不起。 – fuz 2010-08-11 17:02:06

+0

這是正確的答案。不知道阿什什在談論什麼。 – 2010-08-11 21:05:56

+0

根據我的理解(從一個不再存在的評論中),「X」實際上** did **屬於一個分支。否則,是的,垃圾收集會照顧它。 Linus強調了它的重要性。 – 2010-08-12 00:09:06

0

積極運行git gc。可能需要時間。

git gc --aggressive 

更多關於git gchere

+0

x不是分支,而是一個提交。 – fuz 2010-08-11 16:42:19

+0

分支只能有一個提交。 'C'和'X'有不同的路徑,對吧? – 2010-08-11 16:44:43

+0

非常感謝。 – fuz 2010-08-11 17:00:27

2

git prune會做你想做的,但它會刪除所有不可達的對象,而不只是一個特定的。