git cherry-pick 提交命令会在当前分支上应用给定提交引入变更。这将引入一个新的独特的提交。严格来说,使用 git cherry-pick 并不改变版本库中的现有历史记录,而是添加历史记录。
跟其他通过应用 diff 来引入变更的 Git 操作一样,你可能需要解决冲突来完全应用给定提交的变更。
git cherry-pick 命令通常用于把版本库中的一个分支的特定提交引入一个不同的分支中。常见的用法是把维护分支的提交移植到开发分支中。
$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit dev~2,above
这是一个新提交,与 dev~2 大致相似,但是需要调整——也需要解决冲突——来应用在分支 rel_2.3 上而不是 dev 上。dev~2 后面的提交都不会在 rel_2.3 后面。只有指定的提交会取出并应用。
cherry-pick 的另一种常见用途是重建一系列提交,通过从一个分支选一批提交,然后把它们引入一个新分支。
假设你在开发分支 my_dev 上有一系列提交,并且你想把它们引入 master 分支,但是以不同的顺序引入。
$ git checkout master
$ git cherry-pick my-dev^
$ git cherry-pick my-dev~3
$ git cherry-pick my_dev
在这种情况下,提交顺序经过了相当大的改变,你很有可能不得不解决冲突。
最初, git cherry-pick 命令一次只能选择应用一个提交。然而,在 Git 的较新版本中, git cherry-pick 允许在一条命令里选择并应用一个范围的提交。如:
# 在master分支上
$ git cherry-pick my_dev~2..my_dev
将在 master 分支上应用新的提交 my_dev~2’、my_dev^’、my_dev’。