参数详情
-e, --edit使用此选项时,git cherry-pick将允许你在提交之前编辑提交消息。-x在记录提交时,将一行内容“(从提交 … 拣选而来)”追加到原始提交消息的末尾,以指示此更改是从哪个提交拣选而来的。这仅适用于没有冲突的拣选操作。--ff如果当前HEAD与拣选提交的父提交相同,则执行快速前进到该提交的操作。--continue使用.git/sequencer中的信息继续正在进行的操作。可用于解决失败的拣选或还原操作中的冲突后继续操作。--quit忘记正在进行的操作。可用于清除失败的拣选或还原操作后的 sequencer 状态。--abort取消操作并返回到序列之前的状态。
拣选提交 将在某个提交中引入的补丁尝试重新应用到你当前所在的分支。
17.1 从一个分支复制提交到另一个分支
git cherry-pick <commit-hash>
此命令将现有提交中的更改应用到另一个分支,同时记录一个新的提交。本质上,你可以从一个分支复制提交到另一个分支。
假设你有以下提交树(来源):
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
\
76cada - 62ecb3 - b886a0 [feature]
假设我们想要将 b886a0 复制到 master(基于 5a6057)。
我们可以运行以下命令:
git checkout master
git cherry-pick b886a0
现在,提交树将如下所示:
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 - a66b23 [master]
\
76cada - 62ecb3 - b886a0 [feature]
其中,新的提交 a66b23 具有与 b886a0 相同的内容(源代码差异、提交消息),但父提交不同。注意,拣选提交只会获取该提交(本例中为 b886a0)的更改,而不是 feature 分支中的所有更改(对于这种情况,你需要使用变基或合并)。
17.2 从一个分支复制一系列提交到另一个分支
git cherry-pick <commit-A>..<commit-B>
此命令将提交 A 之后的所有提交(包括 B)应用到当前检出的分支。
git cherry-pick <commit-A>^..<commit-B>
此命令将提交 A 和提交 B 之间的所有提交(包括 B)应用到当前检出的分支。
17.3 检查是否需要拣选提交
在开始拣选提交过程之前,你可以检查你想要拣选的提交是否已经在目标分支中,如果是这样,你就不需要执行任何操作。
git branch --contains <commit>
此命令列出包含指定提交的本地分支。
git branch -r --contains <commit>
此命令还包括远程跟踪分支。
17.4 查找尚未应用到上游的提交
git cherry 命令显示尚未拣选的更改。
例如:
git checkout master
git cherry development
输出如下:
+ 492508acab7b454eee8b805f8ba906056eede0ff
- 5ceb5a9077ddb9e78b1e8f24bfc70e674c627949
+ b4459544c000f4d51d1ec23f279d9cdb19c1d32b
+ b6ce3b78e938644a293b2dd2a15b2fecb1b54cd9
以 + 开头的提交是尚未拣选到 development 分支的提交。
语法:
git cherry [-v] [<upstream> [<head> [<limit>]]]
选项:
-v在 SHA1 旁边显示提交主题。<upstream>搜索等效提交的上游分支。默认为HEAD的上游分支。<head>工作分支;默认为HEAD。<limit>不报告直到(包括)limit的提交。
更多信息请参阅 git-cherry 文档。