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

如何在GitHub拉取请求中基于旧提交新增修改且保留历史提交

保留原有提交并新增修改提交的解决方法

如果还没执行过你说的reset和强制推送操作

直接按下面的步骤来,就能保住最后3个提交,同时新增第4个包含修改的提交:

  • 要是当前有未提交的修改,先暂存起来:git stash
  • 切换到你想基于的那个旧提交(也就是倒数第3个提交):git checkout HEAD~3
  • 在这里完成你的修改,然后提交:
    git add .
    git commit -m "New changes"
    
  • 切回你原来的工作分支(比如main或者dev):git checkout <你的分支名称>
  • 把刚才的新提交合并到当前分支:git merge HEAD@{1}(或者直接用新提交的哈希值,也可以在切换到旧提交时先创建临时分支,再merge分支名)
  • 最后推送到远程仓库:git push

这样你的分支历史里会完整保留原来的3个提交,同时多出这个带新修改的第4个提交。

要是已经执行了reset和强制推送,远程历史被覆盖了

先把本地的提交历史恢复回来:

  • 用git reflog查看本地的操作记录,找到你执行reset之前的HEAD指针(比如记录里会显示类似abc123 HEAD@{2}: commit: 原来最后一个提交的信息)
  • 恢复到那个状态:git reset --hard abc123
  • 之后再按照上面的步骤添加新提交并推送就行。

更省事的替代办法

如果你只是想把基于旧提交的修改追加到当前分支末尾,也可以用补丁方式:

  • 生成旧提交到当前修改的补丁文件:git diff HEAD~3 > my-changes.patch
  • 确保当前分支是带有原来3个提交的状态:git checkout <你的分支名称>
  • 应用补丁:git apply my-changes.patch
  • 提交修改:
    git add .
    git commit -m "New changes"
    git push
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:05:46