git多分支时,经常将代码从一个分支转移到另个分支上。
- 如果是将一个分支上的所有代码都转移到另个分支上,使用
git merge
; - 如果只是转移其中部分commit的移到另个分支上时,使用cherry pick。原来的分支上这些commit也依然存在。
分支合并游离commit
分支master合并游离commit 33333333333:
1 | git checkout master |
基本使用
将A分支上的commit1,移到分支B上:
1 | git checkout B |
这会在当前分支产生一个新的提交,当然它们的哈希值会不一样。
如果使用分支名,表示将该分支的最新提交转移到当前分支。
1 | git cherry-pick A |
转移多个提交
cherry-pick支持转移多个提交。
1 | git cherry-pick commit1 commit2 |
上面的命令将commit1和commit2两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。
如果想要转移一系列的连续提交,可以使用下面的简便语法:
1 | git cherry-pick commitstart..commitend |
上面的命令可以转移从commitstart到commitend的所有提交。它们必须按照正确的顺序放置:提交commitstart必须早于提交commitend,否则命令将失败,但不会报错。
注意,使用上面的命令,提交commitstart将不会包含在 Cherry pick 中。如果要包含提交commitstart,可以使用下面的语法:
1 | git cherry-pick commitstart^..commitend |
代码冲突
在cherry-pick的过程中,发生代码冲突,会停下来,由用户决定如何继续操作。
继续
出现冲突,用户解决代码冲突后,将修改的文件重新加入暂存区git add .
,然后继续cherry-pick:1
git cherry-pick --continue
放弃
1
git cherry-pick --abort
发生代码冲突后,放弃合并,回到操作前的样子。
quit
1
git cherry-pick --quit
发生代码冲突后,退出cherry-pick,但是不回到操作前的样子。
转移到另一个代码库
1 |
|