在实际开发中我们经常会遇到这样的场景我们在zr分支做了一些功能提交但需要把这些提交移动到prod-zr-1.0.5-4分支上去。本文将介绍使用cherry-pick方法移动提交 并给出详细操作步骤和注意事项。1. 使用cherry-pick移动提交cherry-pick是 Git 提供的命令用于复制某个提交到当前分支。优点操作简单安全不改变原分支历史。步骤1️⃣ 保存未提交修改可选但推荐gitstash save临时保存未提交修改这样可以避免本地修改被覆盖。2️⃣ 切换到目标分支并更新gitcheckout prod-zr-1.0.5-4gitpull origin prod-zr-1.0.5-43️⃣ 查看zr分支提交gitlog zr--oneline假设我们要移动的提交如下98f2e35a Merge branchprodinto zr 22f4bc0b feat(account): 功能2 abcd1234 feat(account): 功能1注意merge commit 不要 cherry-pick只 cherry-pick 功能提交。4️⃣ 执行 cherry-pick单条提交gitcherry-pick 22f4bc0b多条连续提交排除 merge commitgitcherry-pick abcd1234^..22f4bc0b5️⃣ 处理冲突如果有# 查看冲突文件gitstatus# 解决冲突后gitaddfilegitcherry-pick--continue# 如果想放弃 cherry-pickgitcherry-pick--abort6️⃣ 推送到远程gitpush origin prod-zr-1.0.5-42. 使用IDEA 进行cherry-pick如图所示我的zr分支 提交记录有两大功能模块以prod 为基础创建分支prod-zr-1.0.5-4 (没有功能1和功能2)目前prod 只想上线功能1的代码切换到prod-zr-1.0.5-4选中需要合并的提交记录可多选,按住ctrl 鼠标右键选择非连续记录按住shift 鼠标选择连续记录选中后右键点击Cherry-Pick可能有冲突解决冲突即可提交记录点击Commit即可可以看到功能1的代码被合并进来了注意事项从之前的步骤就可以知道Cherry-Pick是单独的commit ,因此如果此时将zr合并到prod-zr-1.0.5-4时,肯定是会有功能1的冲突的,因为如下图所示Cherry-Pick后的hash值和原来的是不一样的,相当是两个内容一样的提交2. 后续想要把功能2的代码合并到prod-zr-1.0.5-4分支可以选择直接解决冲突(但是不建议,如果修改的代码很多需要花很多时间合并,如果全部选用一方的冲突代码可能会导致某一方对冲突代码文件新修改的内容丢失) 3. 建议方法使用Cherry-Pick把后续功能2的提交记录提交到prod-zr-1.0.5-4分支3. 总结方法适用场景优点注意事项cherry-pick少量、零散提交安全、不改变原分支merge commit 需要排除rebase连续提交整体移动历史干净、提交顺序一致改变历史需要小心远程分支我的建议对于少量提交用cherry-pick最简单对于一段连续提交用rebase更整洁但要小心历史修改。