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——继续
。非常好!壁球正是我应该用的!谢谢你的提示!:)