删除旧的git提交

时间:2012-03-15 17:39:07

标签: git

我对git很新,并且想知道这样的事情是否可行?

>git log --pretty=oneline --abbrev-commit
2f05aba Added new feature
3371cec Fixed screw up    <-- I want to remove this
daed25c Screw up          <-- and remove this.
e2b2a84 First.                So it's like they never happend.

这可能吗?

4 个答案:

答案 0 :(得分:71)

如果您真的希望删除它们(从历史记录中擦除它们,再也不会被看到),您可以

运行rebase:

git rebase -i HEAD~4

然后,只需删除(或注释掉)与您要删除的提交相对应的行,如下所示:

pick 2f05aba ... #will be preserved
#pick 3371cec ... #will be deleted
#pick daed25c ... #will be deleted
pick e2b2a84 ... #will be preserved

答案 1 :(得分:55)

这可以通过git rebase实现。请尝试以下

git rebase -i HEAD~4

然后,按照编辑器中的交互式说明进行操作。在第一步中,你“压缩”提交。看起来应该是这样的:

pick 2f05aba ... will be preserved
squash 3371cec ... will be squashed with daed25c
squash daed25c ... will be squashed with e2b2a84
pick e2b2a84 .. will contain this and 3371cec and daed25c

在第二步中,您可以编辑提交消息。

答案 2 :(得分:1)

当您想要在单个哈希下生成合并提交列表时,Squash非常有用,但是如果您希望进行三次单独的提交并且最终输出看起来像是一次提交,我建议{{1 }}

fixup

git rebase -i HEAD~4

您可以在交互式rebase UI的命令列表中找到更多信息。

答案 3 :(得分:0)

要完全删除提交,现在为git交互式rebase提供了一个新选项drop。第一次运行:

git rebase -i HEAD~4

然后将pick替换为drop,以删除要提交的提交:

pick 2f05aba ... #will be preserved
drop 3371cec ... #will be dropped
drop daed25c ... #will be dropped
pick e2b2a84 ... #will be preserved

这适用于Fedora,适用于以下版本:

$ git version
git version 2.21.0