如何清理 git 历史记录,在推送后删除某些提交?
How to cleanup git history removing certain commits after they've been pushed?
我想做什么:
我完成了一项功能。
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
,但我没有让它正常工作。我敢肯定这非常简单,我今天刚玩完。
在这种情况下使用交互式变基
这可以使用
启动
git rebase -i
后跟您要包含的头数
git rebase -i HEAD~5
其中 HEAD~5
表示最后 5 次提交
然后您可以使用更多选项将您的提交压缩为一个并编辑消息。只是代替 pick
选项写 squash
而不是
所以你看,我将选项 pick
更改为 s
,这是 squash
的快捷方式。当我保存并关闭这个文件时,交互式变基将被启动,我指示要压缩的提交将被压缩到 21b4e04 Fixed missing bad practice
。压缩后,它会要求您输入新的提交消息。输入您的新消息并点击 enter
,您就完成了。
我想做什么:
我完成了一项功能。
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
,但我没有让它正常工作。我敢肯定这非常简单,我今天刚玩完。
在这种情况下使用交互式变基
这可以使用
启动git rebase -i
后跟您要包含的头数
git rebase -i HEAD~5
其中 HEAD~5
表示最后 5 次提交
然后您可以使用更多选项将您的提交压缩为一个并编辑消息。只是代替 pick
选项写 squash
而不是
所以你看,我将选项 pick
更改为 s
,这是 squash
的快捷方式。当我保存并关闭这个文件时,交互式变基将被启动,我指示要压缩的提交将被压缩到 21b4e04 Fixed missing bad practice
。压缩后,它会要求您输入新的提交消息。输入您的新消息并点击 enter
,您就完成了。