如何将分支A上已commit未push的改动迁移到分支B并保留B原有内容
解决方案
你可以通过以下两种常用方案实现需求,两种方案都不会修改分支B的原有提交记录,仅追加你在分支A上的新增改动:
方案1:使用cherry-pick(最适合单条/少量commit的场景)
- 首先确认你已经切换到了正确的分支B,可执行
git branch验证当前所在分支 - 执行
git log branchA查看分支A上你要迁移的commit的哈希值,记录下前7位即可 - 执行
git cherry-pick <你刚才记录的commit哈希值>,即可把这条commit完整复制到当前的分支B上 - 如果出现冲突,解决冲突后执行
git add <冲突文件>,再执行git cherry-pick --continue即可完成迁移 - 如果你需要清除分支A上的错误commit,切换回分支A后执行
git reset --hard HEAD~1即可删除最近1条未push的commit(注意操作前确认没有未保存的改动)
方案2:使用rebase(适合多条连续commit的场景)
如果你在分支A上有N条连续的commit需要整体迁移,用rebase效率更高:
- 保持当前在分支B上,执行
git rebase --onto B A~N A,其中N是你要迁移的commit的数量 - 迁移完成后切换回分支A,同样可以执行
git reset --hard HEAD~N清理掉分支A上的错误提交
注意:两种方案执行完成后,分支B上只会新增你在分支A上的改动,分支B原有的所有内容和提交记录都不会被修改。如果后续你要提交改动,直接在分支B上执行
git push即可。
内容的提问来源于stack exchange,提问作者Kabaner
相关产品推荐
相关产品推荐

