使用rebase删除无用的提交会产生错误

时间:2014-01-12 13:40:08

标签: git

我提交了一行代码,然后我提交了它(“Changed Project Name”)。几分钟后,我意识到我的改变是错误的。所以我再次更改它,并再次提交(“更正的项目名称”)。

我有一个无用的提交,我想将它从历史中删除。所以我这样做了:

git rebase HEAD~6

我删除了提交“已更改的项目名称”。但是当我保存rebase文件时,我收到了这条消息:

error: could not apply 6df1da5... Corrected Project Name

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".
Could not apply 6df1da5... Corrected Project Name

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

通过删除git rebase -i的提交,你告诉git放弃该提交的更改。

但是,您的下一次提交会基于这些更改构建(因为它会更改同一行)。因此,删除先前的提交会导致合并冲突。这就是git告诉你的错误信息。

当然,您不希望丢弃来自错误提交的更改 - 无论如何您已经还原了它。你只是想让它从历史中消失。要做到这一点,你需要压缩这两个提交,即将它们合并为一个提交。

要做到这一点:

  • 中止正在运行的rebase(git rebase --abort
  • 再次运行git rebase HEAD~6
  • 而不是删除错误的提交,压缩它(“s”)

现在git会将两个提交合并为一个提交,看起来好像你已经直接执行了正确的更改: - )。

答案 1 :(得分:2)

您的历史似乎如下:

* HEAD   Corrected Project Name
* HEAD~1 Changed Project Name
* HEAD~2 some other commit
* ...

如果你只使用HEAD撤消HEAD~1的更改,你可以使用git reset --hard HEAD~2丢弃两个提交。这导致:

* HEAD some other commit
* ...

如果最后两次提交引入了一些重要更改,并且您只想将它​​们组合在一起,则可以使用git rebase -i并以交互方式压缩两次提交,或使用git reset --soft HEAD~2; git commit。两者都会导致:

* HEAD   Combined commit
* HEAD~1 some other commit
* ...