You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git回退已推送的两次提交 仅保留最新提交创建PR合并如何操作?

操作错误点
  • 撤销逻辑和顺序错误:你执行git revert的目标和顺序完全不符合需求。你本意是保留今日提交、清除10天前的提交修改,结果先撤销了今日的c12345d提交,再撤销10天前的212345f提交,最终本地分支的状态相当于直接回到了两次提交之前的版本,完全没有保留你今日的修改。
  • 本地修改未同步到远程:你在本地做的两次revert操作仅存在于本地分支,没有推送到PR #46对应的远程分支,所以GitHub端的PR页面依然会保留原来的两次提交记录和对应文件。
  • 分支使用逻辑错误:你直接在原来PR #46对应的分支上做新修改,新提交自然会自动归入旧PR,没有基于最新的master分支拉取独立分支承载今日的修改。
正确修复步骤

第一步:恢复本地分支到包含两次提交的状态

首先撤销你刚才做的两次错误的revert操作,回到执行revert之前的状态,此时本地分支会包含10天前+今日的两次提交:

git reset --hard HEAD~2

注意:执行reset前确认你本地没有其他未提交的修改,否则会丢失未提交内容。

第二步:移除10天前的提交,仅保留今日提交

使用变基操作删除10天前的提交记录:

git rebase -i HEAD~2

执行命令后会弹出编辑界面,找到10天前的提交(哈希前缀212345f)对应的那一行,把行首的pick改成drop,保存退出后变基会自动执行,完成后你的本地分支就只会保留今日的提交了。

第三步:清理旧PR内容(可选)

如果你要清理已经关闭的PR #46对应的远程分支内容,可以强制推送当前分支到远程对应分支:

git push -f origin 你原来的PR对应分支名

推送完成后旧PR #46的页面就只会显示今日的提交内容,如果你不需要清理旧PR可以直接跳过这一步。

第四步:创建新PR合并今日修改

更稳妥的方式是直接从最新的远程master拉取新分支,把今日的提交迁移到新分支后提新PR:

  1. 切换到本地master分支,拉取最新远程代码:
git checkout master
git pull origin master
  1. 新建独立功能分支:
git checkout -b 今日修改对应的新分支名
  1. 把今日的提交cherry-pick到新分支:
git cherry-pick c12345d
  1. 推送新分支到远程,创建新PR即可,此时新PR只会包含今日的修改内容。

内容的提问来源于stack exchange,提问作者jahan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:30:02