cherry-pick
将指定的提交(commit)应用于当前分支
实例
选择一个commit,合并进当前分支
- git cherry-pick [commit]
应用主分支顶端的提交所带来的变化,并以此为基础创建一个新的提交。
- git cherry-pick master
应用作为master祖先但不是head祖先的所有提交所带来的变化来产生新的提交。
- git cherry-pick ..master
- git cherry-pick ^HEAD master
应用由maint或next的祖先提交的所有提交(而不是master或其任何祖先)提交的更改。注意后者并不意味着 maint 以及 master 和 next 之间的一切; 具体地, maint 如果它被包括在将不被使用 master 。
- git cherry-pick maint next ^master
- git cherry-pick maint master..next
应用master指向的第5次和第3次提交所带来的变化,并利用这些变化创建2个新的提交。
- git cherry-pick master~4 master~2
将master指向的第二个最后提交和next指向的最后一个提交所带来的变化应用到工作树和索引中,但不使用这些变化创建任何提交。
- git cherry-pick -n master~1 next
如果历史是线性的,而且 HEAD 是 next 的祖先,那么更新工作树,并将 HEAD 指针向前推进以匹配 next。否则,就将 next 中的提交引入的变化应用到当前分支,但不是 HEAD,为每个新变化创建一个新的提交。
- git cherry-pick --ff ..next
将主分支上触及README的所有提交引入的修改应用到工作树和索引中,这样就可以检查结果,并在合适的情况下将其变成一个新的提交。
- git rev-list --reverse master -- README | git cherry-pick -n --stdin
指令
- --continue
- 使用
.git/sequencer
中的信息继续进行中的操作。在解决失败的樱桃选择或还原中的冲突后,可用于继续操作。 - --skip
- 跳过当前的提交,继续执行其余的序列。
- --quit
- 忘记当前正在进行的操作。可用于清除选取或还原失败后的音序器状态。
- --abort
- 取消操作,回到序列前状态。
选项
- <commit>…
-
cherry-pick commit-id
- -e
--edit -
使用此选项,
git cherry-pick
将允许您在提交之前编辑提交消息。 - --cleanup=<mode>
-
此选项确定在将提交消息传递到提交机器之前如何对其进行清理。
- -x
-
在记录提交时,在原始提交信息中添加一行"(cherry picked from commit …)",以表明这个修改是来自哪个提交。
- -r
-
过去,该命令默认执行上述的
-x
,而-r
则禁用它。现在默认为不执行-x
,因此此选项为无操作。 - -m <parent-number>
--mainline <parent-number> -
通常情况下,你不能挑拣一个合并,因为你不知道合并的哪一边应该被视为主线。这个选项指定了主线的父号(从1开始),允许cherry-pick重放相对于指定父号的变化。
- -n
--no-commit -
通常情况下,该命令会自动创建一个提交序列。这个标志将对工作树和索引进行必要的修改,以挑出每个命名的提交,而不进行任何提交。此外,当使用这个选项时,你的索引不必与 HEAD 提交匹配。挑拣是根据索引的起始状态进行的。
-
当在一行中挑选多个提交的效果时,这很有用。
- -s
--signoff -
在提交消息的末尾添加
Signed-off-by
- -S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign -
GPG签名提交。所述
keyid
的参数是可选的,并且默认为提交者身份; 如果指定,则必须将其固定在选项中,且不能留空格。--no-gpg-sign
有助于commit.gpgSign
配置变量和更早的--gpg-sign
。 - --ff
-
如果当前的HEAD与cherry-picked提交的父本相同,那么将执行快进到这个提交。
- --allow-empty
-
默认情况下,挑选空提交失败,这表明需要显式调用
git commit --allow-empty
。此选项将覆盖该行为,从而允许空提交自动保留在“自动选择”中。请注意,当“ --ff”生效时,即使没有此选项,也会保留符合“快进”要求的空提交。还要注意,使用此选项只会保留最初为空的提交(即,提交记录的树与其父树相同)。由于先前的提交而变为空的提交将被丢弃。要强制包含这些提交,请使用--keep-redundant-commits
。 - --allow-empty-message
-
默认情况下,挑空消息的提交会失败。这个选项可以重写这个行为,允许带空消息的提交被摘取。
- --keep-redundant-commits
-
如果正在挑选的提交与当前历史记录中已有的提交重复,则它将变为空。默认情况下,这些多余的提交会导致
cherry-pick
停止,因此用户可以检查该提交。此选项将覆盖该行为并创建一个空的提交对象。表示--allow-empty
。 - --strategy=<strategy>
-
使用给定的合并策略。只能使用一次。
- -X<option>
--strategy-option=<option> -
将特定于合并策略的选项传递到合并策略。
- --rerere-autoupdate
--no-rerere-autoupdate -
如果可能的话,允许重访机制用自动解决冲突的结果更新索引。