Git如何从另一分支合并指定commit范围的部分变更到当前分支
Git提取指定范围提交合并到其他分支操作方案
以下操作中所有commitXX占位符,请替换为你仓库对应提交的实际哈希值(写前7位即可)。
方案1:使用git cherry-pick(推荐,操作最简便)
cherry-pick可以直接将指定范围的提交复刻到当前分支,不会引入范围外的变更:
- 首先切换到
branchA分支,确认当前HEAD处于commit01节点:git checkout branchA - 执行范围提交拾取:注意
git cherry-pick的范围规则是左开右闭,a..b代表包含b但不包含a,因此要覆盖commit13到commit15三个提交,起始点需要设为commit13的前一个提交commit12:
如果要更稳妥也可以单独指定三个提交:git cherry-pick commit12..commit15git cherry-pick commit13 commit14 commit15 - 应用过程中如果出现代码冲突,解决冲突后执行
git add <冲突文件路径>,再运行git cherry-pick --continue继续后续提交的应用。如果要放弃本次操作回滚到初始状态,执行git cherry-pick --abort即可。
方案2:生成补丁包应用(适合跨仓库/特殊场景使用)
如果分支差异过大导致cherry-pick异常,可以用补丁包的方式实现同样效果:
- 生成
commit13到commit15的补丁文件:git format-patch commit12..commit15 --stdout > commit13-15.patch - 切换到
branchA分支:git checkout branchA - 应用补丁包:
git am < commit13-15.patch - 遇到冲突的处理逻辑和
cherry-pick类似:解决冲突后执行git add <冲突文件路径>,再运行git am --continue继续,放弃操作执行git am --abort。
操作前置建议:为了避免操作失误丢失原有分支内容,操作前可以先给
branchA当前节点打临时备份标签:git tag backup-branchA commit01,操作验证无误后可以删除标签:git tag -d backup-branchA。
内容的提问来源于stack exchange,提问作者Daniel Shao
相关产品推荐
相关产品推荐

