何为摘樱桃:
git cherry-pick 可以选择某一个分支中的一个或几个commit(s)来进行操作。一般用作 master 选择其他分支的"樱桃🍒"进行选择性"摘取"提交,通俗的说就是:在dev的n多次提交里面把需要上线的代码有选择的合并到master.
使用场景:
稳定版本分支1与开发版本分支2,不能直接把两个分支合并,否则会导致版本混乱,要将分支2中的功能合入到分支1,则可以使用git cherry-pick高效完成
如果直接使用Merge-Changes 会将所有的提交合并到主干。
如果用的Beyond Compare 对比dev 和master 然后把需要提交的dev中的代码一个一个的弄到master里面,这样的操作不仅麻烦,而且容易漏文件。
Merge-Changes nocommit 。这样可以把分支的所有提交下载到本地,然后自己选择自己需要提交的文件commit。(如果不选nocommit会自动将所有的dev文件下载到本地仓库这样就不能有选择的提交了)具体操作方法如:
1.切换到master分支,然后右击项目 git-Repository - Merge-Changes 然后 勾选nocommit如下图。
上面的方法并不像是一个很正规的合并部分文件的操作。
下面介绍git合并部分分支提交到master的功能(Cherry-pick 摘樱桃),此功能会根据提交来合并功能。具体操作
1. 选择项目右击。git- show history
2.任意选一个提交,右击选select in git log
3.选择要合并的提交,右击选cherry-pick,注意这里可以选择一个或多个 🍒,进行提交
4.提交文件。
下面是git指令图解描述
cherry-pick是Git里对commit操作很好的一个指令,比如想把test分支中的其中多个commit merge到master,那么你需要挑你所需要的commit合到master,这时候就用cherry-pick来捡。
|
| C3
| |
C1 C2
| | test
| /
| /
master
想将test分支中的C2 commit合并到master分支,丢弃C3的修改。
直接merge会把C3也合并进去,这时用git cherry-pick可以解决问题
- 先用git log查看,C2 commit的id,复制下来
- git checkout 到master分支下
- git cherry-pick <C2_id>
如果cherry-pick过程没有出现冲突的话,那就是完成了合并,如下图所示
|
C4
| \
| \ C3
| \ |
C1 C2
| | test
| /
| /
master
如果出现冲突,
- 先解决冲突
- git add 将解决了冲突的文件添加到暂存区
- git cherry-pick --continue就行