如何通过Git依次回退多个合并与提交至Commit H状态?
Git 回退到指定提交并推送远程的操作方法
场景说明
你的Git提交历史(从新到旧排序)如下:
Merge A(当前最新状态) Commit B Merge C Commit D Commit E Merge F Commit G Commit H <-- 目标状态
需要撤销上述所有在H之后的提交(3个合并提交+4个普通提交),将代码恢复到Commit H的状态并推送到远程仓库。
方法一:重置到目标提交(适合私有分支/团队允许改写历史)
这种方式会直接改写本地和远程的提交历史,操作更直接,但如果是多人协作的公共分支,可能会影响其他开发者。
找到Commit H的哈希值
执行git log查看提交历史,复制Commit H的完整或短哈希值(比如h123abc)。本地强制重置到Commit H
git reset --hard h123abc
注意:
--hard参数会清空工作区和暂存区的未提交修改,执行前务必确认本地没有需要保留的更改。
- 强制推送到远程仓库
为了避免意外覆盖他人提交,优先使用--force-with-lease:
git push origin <你的分支名> --force-with-lease
如果确认远程没有其他人的新提交,也可以用--force:
git push origin <你的分支名> --force
方法二:反向提交撤销(适合公共分支/不想改写历史)
这种方式会为每个需要撤销的提交生成一个反向提交,保留原有历史记录,最终代码状态与Commit H一致,更安全。
需要从最新的提交开始依次反向撤销,合并提交需要用-m 1指定父分支(通常选1,代表合并前的主分支):
- 撤销Merge A:
git revert -m 1 <Merge A的哈希值>
- 撤销Commit B:
git revert <Commit B的哈希值>
- 撤销Merge C:
git revert -m 1 <Merge C的哈希值>
- 撤销Commit D:
git revert <Commit D的哈希值>
- 撤销Commit E:
git revert <Commit E的哈希值>
- 撤销Merge F:
git revert -m 1 <Merge F的哈希值>
- 撤销Commit G:
git revert <Commit G的哈希值>
完成所有反向提交后,推送到远程:
git push origin <你的分支名>
内容的提问来源于stack exchange,提问作者Cherple
相关产品推荐
相关产品推荐

