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

如何创建代表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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:44:59