如何创建代表Git两个提交差异的提交?拆分PR场景实现
问题翻译
我当前基于main分支开发,HEAD指向提交A。我希望将工作拆分为两个PR,同时妥善保留提交历史。我的思路是执行git reset --soft main,取消暂存需要拆分出去的部分,提交剩余内容,使HEAD指向main分支之上的提交B。理想情况下,此时我想执行git reset --hard A回到原状态,然后在A之上创建一个提交,让仓库状态变为提交B的状态,但我找不到创建这个代表A与B差异的提交的方法。请问如何实现该提交,移除分支中需要拆分的内容?
解决方案
步骤1:备份原分支(保留提交A的历史)
先备份当前包含提交A的分支,避免操作失误丢失原始提交记录:
git branch feature-backup
步骤2:完成第一个PR的提交B
按照你的思路生成第一部分内容的提交:
# 软重置到main分支,暂存区保留提交A的所有改动 git reset --soft main # 取消暂存要拆分到第二个PR的内容(两种可选方式) # 方式1:取消指定文件的暂存 git reset HEAD <要拆分的文件路径1> <要拆分的文件路径2> # 方式2:交互式选择要保留的内容(更灵活,适合复杂改动) git add -p # 提交第一部分内容,得到提交B git commit -m "第一部分:[填写内容描述]"
此时当前分支的HEAD指向提交B,可基于该分支提交第一个PR。
步骤3:回到提交A并生成第二个提交
切换到备份分支,生成移除提交B内容的新提交:
# 切换到保留提交A的备份分支 git checkout feature-backup # 生成提交B与main分支的差异补丁,反向应用以移除B中的内容 git diff main B | git apply -R # 提交剩余内容,得到提交C(仅包含A中不属于B的部分) git commit -m "第二部分:[填写内容描述]"
此时feature-backup分支的提交历史为main -> A -> C,可基于该分支提交第二个PR。
补充说明
- 提交A的完整历史会保留在
feature-backup分支中,满足你保留历史的需求。 - 两个PR的提交B和C相互独立,可分别进行审核与合并。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

