Git 使用rebase删除无用的提交会导致错误

Git 使用rebase删除无用的提交会导致错误,git,Git,我承诺更改一行代码,然后提交(“更改的项目名称”)。几分钟后,我意识到我找错了钱。所以我再次更改了它,并再次提交(“更正的项目名称”) 现在我有一个无用的承诺,我想把它从历史中删除。所以我这样做了: git rebase HEAD~6 我删除了提交“更改项目名称”。但当我保存rebase文件时,我收到以下消息: error: could not apply 6df1da5... Corrected Project Name When you have resolved this proble

我承诺更改一行代码,然后提交(“更改的项目名称”)。几分钟后,我意识到我找错了钱。所以我再次更改了它,并再次提交(“更正的项目名称”)

现在我有一个无用的承诺,我想把它从历史中删除。所以我这样做了:

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

如何解决这个问题?

通过使用git rebase-I删除提交,您告诉git放弃该提交中的更改

但是,您的下一次提交将基于这些更改(因为它更改了同一行)。因此,删除较早的提交会导致合并冲突。这就是git在错误消息中告诉您的

当然,您不想放弃来自错误提交的更改-您已经恢复了它。你只是想让它从历史中消失。为此,您需要压缩两个提交,即将它们合并为一个提交

为此:

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

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

通过使用git rebase-i删除提交,您告诉git放弃该提交中的更改

但是,您的下一次提交将基于这些更改(因为它更改了同一行)。因此,删除较早的提交会导致合并冲突。这就是git在错误消息中告诉您的

当然,您不想放弃来自错误提交的更改-您已经恢复了它。你只是想让它从历史中消失。为此,您需要压缩两个提交,即将它们合并为一个提交

为此:

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

现在git将把两个提交合并为一个提交,看起来就像您直接执行了正确的更改:-)。

您的历史记录如下所示:

* 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提交
。两者都将导致:

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

您的历史似乎是这样的:

* 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提交
。两者都将导致:

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

或者,编辑包含项目名称的文件并手动解决冲突,然后
git add
it和
git rebase——继续
。非常好!壁球正是我应该用的!谢谢你的提示!:)或者,编辑包含项目名称的文件并手动解决冲突,然后
git add
it和
git rebase——继续
。非常好!壁球正是我应该用的!谢谢你的提示!:)