有没有办法从git树中彻底删除一个非常旧的提交?

时间:2017-08-18 15:24:57

标签: git git-rebase git-filter-branch

TL; DR:有一个6岁的提交,我只是想让它消失,我相信它是空的,我想把它删除。

即。最底层的提交:

[a few thousand commits on top of this]
*   08d01075 - (5 years ago)
|\
| *   2da4e798 - (5 years ago)
| |\
| |/
|/|
* | f29c0523 - (5 years ago)
* | a9a851d7 - (5 years ago)
* | d8e70b9b - (5 years ago)
| *   84a54eff - (5 years ago) new branch 
| |\
| |/
|/|
* | 022bca02 - (6 years ago) 
* | 79a5d079 - (6 years ago) 
* | 5a89f05a - (6 years ago) 
* | f02cc7f0 - (6 years ago) 
* | 645ffc64 - (6 years ago) 
* | 9693b596 - (6 years ago) 
 /
* 55555555 - (5 years ago) the null commit

55555555是我想删除的

我不知道这个提交有多真实,因为:

$ git diff 55555555^ 55555555 
fatal: ambiguous argument '55555555 ^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

或者

$ git show --no-patch  2bb15d71
commit 5555555
Author: .........
Date:   Tue Mar 12 11:01:54 2012

the null commit

1 个答案:

答案 0 :(得分:0)

您可能实际上并不想这样做,如评论中所述。

但如果您确定这样做,可以运行交互式rebase:

git rebase -i --root

-i是交互式rebase的转换。

--root是第一次提交。

删除要删除的提交行,然后保存。

这种技术的问题在于提交将保留在其他贡献者计算机上,并且在他们进行更改时将被推送到远程仓库,除非他们遵循相同的步骤。如果你一个人工作,这应该有效。