如何删除没有指定分支的git提交?

如何删除没有指定分支的git提交?

问题描述:

我有以下混帐回购协议结构:如何删除没有指定分支的git提交?

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

的承诺的X被accidentially完成(无法弄清楚如何),并没有命名的分支。我怎样才能删除这个提交?

对于细节,GIT中日志示出了该(翻译从德国回来,遗憾的任何inconvieniances):

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

... 

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

如果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

积极运行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

git prune会做你想做的,但它会删除所有不可达的对象,而不只是一个特定的。