如何清除git历史记录删除某些提交后的推送?

时间:2016-08-01 22:35:09

标签: git rebase git-commit squash git-squash

我想做的事情:

我完成了一项功能。

git add -A; git commit -m "feature A complete"

然后我意识到我错过了一些东西。

git add -A; git commit -m "feature A missed something 1"
git add -A; git commit -m "feature A missed something 2"
git add -A; git commit -m "feature A missed something 3"

现在我的历史看起来像这样:

A238ad1 feature A missed something 3
3238adX feature A missed something 2
1238ad7 feature A missed something 1
111AAA2 feature A complete

我希望它看起来像这样:

111AAA2 feature A complete

将所有missed something提交合并到feature A complete提交。

我知道git rebase -i HEAD~4是正确的方法,但它实际上并没有删除糟糕的提交以清理历史记录。

我在其他一些文章中注意到git commit --fixup命令和git rebase -i --autosquash,但我没有让它正常工作。我确信这非常容易,我今天刚刚摆脱它。

1 个答案:

答案 0 :(得分:1)

在这种情况下,使用交互式rebase

可以使用

启动
git rebase -i 

后跟您想要包含的头数

git rebase -i HEAD~5

其中HEAD~5表示最后5次提交

然后,您可以使用更多选项将提交压缩为一个并编辑消息。而不是pick选项而是写squash而不是

squash

因此,您在此处看到,我为pick更改选项s,这是squash的快捷方式。当我保存并关闭此文件时,将启动交互式rebase,并且我指示用于压缩的提交将被压缩到21b4e04 Fixed missing bad practice。压缩后,它会要求您输入新的提交消息。输入您的新消息,然后点击enter即可完成。