检查一下
首先要注意,git revert
会按照你输入的哈希值列表的顺序撤销你的补丁,你需要将这些哈希值从最新到最旧的顺序列出,因为你想要逆时针进行。所以,我将称呼你的哈希值为
<hash1> ... <hashN>
其中<hash1>
比<hash2>
旧...比<hashN>
旧。所以,请确保您正在执行正确的操作。
git revert <hashN> ... <hash1>
首先要做的是在正确的顺序中撤销它们,然后尝试使用--no-commit
选项:
简单解决方案
其次,假设您已按正确顺序还原它们,请尝试使用--no-commit
选项:
git revert --no-commit <hashN> ... <hash1>
更复杂的解决方案
第三步,如果简单的解决方案不起作用,但您确实需要撤消的提交作为单个提交真的有意义(如果没有,我不看好),那么请尝试以下方法:将要撤消的四个提交合并成一个大提交,然后再撤消这个大提交。
创建大提交:
在最早提交的父级处创建一个分支:
git checkout -b big-commit <hash1>~
复制您新分支上的提交并将它们合并:
git cherry-pick --no-commit <hash1> ... <hashN>
git commit -m "Big commit"
现在,您的分支big-commit
应该有一个大的提交记录。
将这个大的提交记录反向应用到您正在尝试还原的分支上:
git checkout <branch you wanted to revert on>
git revert big-commit
另一个相对简单的解决方案
使用选择性变基来重建相关分支,就像它从未包含不想要的提交一样:
创建一个新的 rebuild
分支进行操作:
git checkout -b rebuild <branch you want to revert>
交互式地变基,丢弃您不想要的提交:
git rebase -i <hash1>~
在交互式的rebase编辑器中,删除 <hash1>
到 <hashN>
的行。
现在你的 rebuild
分支将包含 <branch you want to revert>
,就好像 <hash1>
到 <hashN>
从未存在过一样。如果你在这里遇到冲突,它们似乎是不可避免的。
如果你需要将你的工作放在 <branch you want to revert>
上,并且你不能只是通过 git reset
将其指向你的新的 rebuild
分支:
git checkout <branch you want to revert>
git reset --hard rebuild
例如,如果您已经将其公开推送,那么您可以将差异作为补丁应用于要还原的分支<branch you want to revert>
:
git co <branch you want to revert>
git diff <branch you want to revert> rebuild | patch
git revert
жҲ–git cherry-pick
е‘Ҫд»ӨдёӯдҪҝз”Ё--no-commit
ж Үеҝ—еҗ—пјҹжҲ‘иҝҳжңүеҸҰдёҖдёӘжғіжі•пјҢжҲ‘дјҡеңЁдёҠйқўж·»еҠ е®ғ... - ntc2