返回顶部
本页目录

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

如果可能的话,允许重访机制用自动解决冲突的结果更新索引。