Git如何回退到历史提交并移除分支上的错误变更?
如何回退到指定提交并更新Pull Request?
我来帮你搞定这个问题!你遇到的核心问题是本地分支重置后没同步到远程,或者revert操作没做完整,导致PR里还保留着错误的变更记录。先确认你的提交日志:
commit 0a90687022fb458de36ac3ff3b3fd3f3920f6b0d Author: Me Date: Thu May 31 10:04:36 2018 +1000 Removed svg commit 7dbcceb6e294572a531d84837753f5698bf192f6 Author: Me Date: Thu May 31 10:02:12 2018 +1000 Removed icon from icons directory commit 97cfd16c87ea280a4e6a7570272157e86195542e Author: Me Date: Wed May 30 17:27:55 2018 +1000 Added icons commit 6b9b9baa6758598ca2ed48d5e029b4b5a2a7f194 Author: Me Date: Wed May 30 16:27:33 2018 +1000 Updated css
根据你的需求,这里有两种可靠的解决办法,选哪种取决于你的分支是否有其他人协作:
方案一:硬重置+强制推送(适合个人私有分支)
这个方法直接把本地和远程分支都回退到目标提交,操作最直接,但会改写分支历史,只适合你自己单独维护的分支:
- 先确保你在目标分支上:
git checkout your-branch-name(把your-branch-name换成你的分支实际名称) - 执行硬重置,彻底回到第一个正确提交:
git reset --hard 6b9b9baa6758598ca2ed48d5e029b4b5a2a7f194 - 强制推送到远程分支,覆盖远程的错误提交:
git push origin your-branch-name --force-with-lease用
--force-with-lease比直接--force更安全,它会检查远程分支有没有其他人的新提交,避免误覆盖别人的工作
推送完成后,你的Pull Request会自动更新,错误的变更会被彻底清除。
方案二:批量撤销提交(适合多人协作分支)
如果这个分支有其他开发者在使用,改写历史会给他们带来冲突,推荐用git revert生成新的撤销提交,保留历史记录:
你需要从最新到旧的顺序,依次撤销最后3个错误提交:
- 撤销最新的
Removed svg提交:git revert 0a90687022fb458de36ac3ff3b3fd3f3920f6b0d - 撤销
Removed icon from icons directory提交:git revert 7dbcceb6e294572a531d84837753f5698bf192f6 - 撤销
Added icons提交:git revert 97cfd16c87ea280a4e6a7570272157e86195542e - 把这3个撤销提交推送到远程:
git push origin your-branch-name
推送后,PR里会显示这3个新的撤销提交,最终代码状态会回到第一个正确提交的样子,同时保留完整的历史记录,不会影响其他协作的开发者。
为什么之前的操作没生效?
- 如果你只执行了
git reset --hard但没强制推送,远程分支的提交记录还是原来的4次,PR是基于远程分支生成的,所以错误变更自然还在。 - 如果用
git revert但只处理了部分提交,或者没把revert后的结果推送到远程,PR也不会同步更新。
内容的提问来源于stack exchange,提问作者MeltingDog
相关产品推荐
相关产品推荐

