如何将develop分支hashX之后的所有提交迁移至master分支?
嘿,咱们来搞定把develop分支里hashX之后的提交迁移到master的事儿!你要的是hashX、hash20一直到hash24这些提交,而且不想把前面的hash12、hash13带过去对吧?直接merge肯定不行,得精准摘出目标提交。这里有两种实用方法,你可以根据实际情况选:
方法一:批量Cherry-pick(灵活可控,适合挑选提交)
这种方法适合你需要灵活选择提交,或者提交数量不算特别多的场景:
- 先切换到master分支:
git checkout master - 批量cherry-pick目标提交范围:这里要注意,hashX的父提交是hash14,所以用
hash14..hash24就能精准选中hashX到hash24的所有提交:git cherry-pick hash14..hash24 - 冲突处理:如果过程中遇到代码冲突,Git会暂停操作。你需要手动打开冲突文件,解决冲突后执行:
如果某个提交你不想处理了,可以用git add <解决冲突的文件名> git cherry-pick --continuegit cherry-pick --skip跳过;要是想彻底放弃这次操作,就用git cherry-pick --abort回到操作前的状态。
方法二:用Rebase --onto迁移连续提交(历史更整洁)
如果hashX到hash24是连续的提交,而且你希望master的提交历史更线性整洁,推荐用这种方法:
- 先创建一个基于master的临时分支,避免修改原develop分支:
git checkout -b temp master - 把develop分支中hash14之后的提交(也就是我们要的目标提交)迁移到临时分支上:
这里的git rebase --onto temp hash14 develop--onto temp指定新的基址是temp分支,hash14是我们要排除的提交的终点(也就是只拿hash14之后的提交),develop是源分支。 - 切换回master分支,合并临时分支:
因为temp是基于master创建的,这里大概率是快进合并,不会有冲突;如果有冲突,解决后提交即可。git checkout master git merge temp - 最后可以删除临时分支:
git branch -d temp
注意事项
不管用哪种方法,操作前最好先备份一下当前分支,防止操作失误:
git branch master-backup git branch develop-backup
内容的提问来源于stack exchange,提问作者Sato
相关产品推荐
相关产品推荐

