如何在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
相关产品推荐
相关产品推荐

