摘樱桃(Cherry Pick)是Git中的一种高级操作,它和分支合并的用途有些类似,但摘樱桃允许从一个分支中选择特定的若干提交并将其应用到当前分支。这在你只想引入某些提交而不是合并整个分支时特别有用。
下面例子中,假设dev
分支比master分支领先2个提交,我们现在要从dev
分支向master
分支摘取这2个提交,我们先切换到master
分支,然后执行以下命令。
git cherry-pick 95627f2088b3d18ea4ef937f4680b57bd312d2d4 58fd7bcc50f268b9a91545f5bcc488a5f5ef96f1
如果一切正常,输出结果如下。
可以看到Cherry Pick为我们将这2个提交从dev
分支摘取了过来,不过在master
分支中,它被设置了新的commitID,提交时间和提交说明则默认沿用了原提交的时间和说明信息。
如果你想顺序的摘取多个提交,可以使用git cherry-pick <起始commitID>..<结束commitID>
的写法。
和分支合并类似,摘樱桃本质也涉及合并操作,因此存在冲突的可能。当冲突发生时,Git会暂停摘樱桃操作,并提示你手动解决冲突。下面例子中,我们从dev
分支摘取1个提交到master
分支,但这个提交和master
分支中的内容存在冲突。
git cherry-pick 547a22a0d1367a16e5e44484d9ade4d5c6c5820b
查看冲突文件,可以看到Git已经标记出了冲突的部分,现在我们需要手动解决冲突。
解决完成后,将文件添加到暂存区,然后使用git cherry-pick --continue
命令继续摘樱桃操作。
git add README.md && git cherry-pick --continue
可以看到冲突处理完成,目标提交被成功摘取到了当前分支。
此外,如果想要放弃本次摘樱桃操作,也可以使用git cherry-pick --abort
命令。