SYNOPSIS
git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff]
[-S[<keyid>]] <commit>…
git cherry-pick (--continue | --skip | --abort | --quit)
DESCRIPTION
1つ以上の既存のコミットが与えられた場合、それぞれが導入する変更を適用し、それぞれに新しいコミットを記録します。 これには、作業ツリーがクリーン(HEADコミットが編集中でない)である必要があります。
変更を適用する方法が明確でない場合、以下のようになります:
-
現在のブランチと
HEADポインタは、正常に行われた最後のコミットに留まります。 -
CHERRY_PICK_HEADrefは、適用が難しい変更を導入したコミットを指すように設定されています。 -
変更がクリーンに適用されたパスは、インデックスファイルとあなたの作業ツリーの両方で更新されます。
-
競合するパスの場合、git-merge(1) の「TRUE MERGE」セクションで説明されているように、インデックスファイルには最大3つのバージョンが記録されます。 作業ツリーファイルには、通常の競合マーカー
<<<<<<<および>>>>>>>で囲まれた競合の説明が含まれます。 -
その他の変更は行われません。
このような競合を解決するための幾つかのヒントについては、 git-merge(1) を参照してください。
OPTIONS
- <commit>…
-
チェリーピックにコミットします。 コミットを綴る方法のより完全なリストについては、 gitrevisions(7) を参照してください。 コミットのセットを渡すことはできますが、デフォルトでは、
--no-walkオプションが指定されているかのように振る舞い、トラバーサルは実行されません。 git-rev-list(1) を参照してください。 範囲を指定すると、すべての<commit>...引数が単一のリビジョンウォークに送られることに注意してください(maint master..nextを使用するk後述する例を参照してください)。 -
-e -
--edit -
このオプションを使用すると、
git cherry-pickを使用してコミットする前にコミットメッセージを編集できます。 -
--cleanup=<mode> -
このオプションは、コミットメッセージがコミット機構に渡される前にどのようにクリーンアップされるかを決定します。 詳細については、 git-commit(1) を参照してください。 特に、
<mode>にscissorsの値が指定されている場合、競合が発生した場合に渡される前に、切り取り線 がMERGE_MSGに追加されます。 -
-x -
コミットを記録するときは、"(cherry picked from commit …)" という行を元のコミットメッセージに追加して、この変更がどのコミットからチェリーピックされたかを示します。 これは、競合のないチェリーピックに対してのみ行われます。 情報が受信者にとって役に立たないため、プライベートブランチからチェリーピッキングをしている場合は、このオプションを使用しないでください。 一方、公開されている2つのブランチ間を選択している場合(たとえば、開発ブランチからの古いリリースのメンテナンスブランチへの修正をバックポートする場合)、この情報を追加すると便利です。
-
-r -
以前は、コマンドはデフォルトで上記の
-xを実行し、-rはそれを無効にすることでした。 現在、デフォルトでは-xを実行しないため、このオプションは何もしません。 -
-m parent-number -
--mainline parent-number -
マージのどちら側をメインラインと見なすべきかわからないため、通常、マージを選択することはできません。 このオプションは、メインラインの親番号(1から始まる)を指定し、cherry-pickが指定された親に関連する変更を再実行(replay)できるようにします。
-
-n -
--no-commit -
通常、コマンドはコミットのシーケンスを自動的に作成します。 このフラグは、コミットを行わずに、名前付きの各コミットを作業ツリーとインデックスにチェリーピックするために必要な変更を適用します。 さらに、このオプションを使用する場合、インデックスはHEADコミットと一致する必要はありません。 チェリーピックは、インデックスの開始状態に対して行われます。
これは、インデックスへの複数のコミットの効果を連続して選択する場合に便利です。
-
-s -
--signoff -
コミットメッセージの最後に
Signed-off-byトレーラーを追加します。 詳細については、git-commit(1) のsignoffオプションを参照してください。 -
-S[<keyid>] -
--gpg-sign[=<keyid>] -
--no-gpg-sign -
GPG署名コミット。
keyid引数はオプションであり、デフォルトでコミッターIDになります。 指定する場合は、スペースなしでオプションに固定する必要があります。--no-gpg-signは、commit.gpgSign構成変数と以前の--gpg-signの両方を打ち消すのに役立ちます。 -
--ff -
現在のHEADが、チェリーピックされたコミットの親と同じである場合、このコミットへの早送り(fast forward)が実行されます。
-
--allow-empty -
デフォルトでは、空のコミットのチェリーピックは失敗し、
git commit --allow-emptyの明示的な呼び出しが必要であることを示します。 このオプションはその動作をオーバーライドし、空のコミットをチェリーピックに自動的に保存できるようにします。--ffが有効な場合、「早送り」要件を満たす空のコミットは、このオプションがなくても保持されることに注意してください。 注意: また、このオプションを使用すると、最初は空だったコミット(つまり、親と同じツリーを記録していたコミット)だけが保持されることに注意してください。以前のコミットのために空にされたコミットはドロップされます。 これらのコミットを強制的に含めるには、--keep-redundant-commitsを使用します。 -
--allow-empty-message -
デフォルトでは、空のメッセージでコミットをチェリーピックすると失敗します。 このオプションはその動作をオーバーライドし、空のメッセージを含むコミットをチェリーピックできるようにします。
-
--keep-redundant-commits -
チェリーピックされているコミットが現在の履歴にすでにあるコミットと重複している場合、そのコミットは空になります。 デフォルトでは、これらの冗長なコミットにより
cherry-pickが停止するため、ユーザーはコミットを調べることができます。 このオプションはその動作をオーバーライドし、空のコミットオブジェクトを作成します。--allow-emptyの指定含んでいます。 -
--strategy=<strategy> -
指定のマージ戦略を使用します。複数回指定できません。 詳細については、 git-merge(1) の「MERGE STRATEGIES」セクションを参照してください。
-
-X<option> -
--strategy-option=<option> -
マージ戦略固有のオプションをマージ戦略に渡します。 詳細については、 git-merge(1) を参照してください。
-
--rerere-autoupdate -
--no-rerere-autoupdate -
可能であれば、rerereメカニズムが自動競合解決の結果でインデックスを更新できるようにします。
SEQUENCER SUBCOMMANDS
-
--continue -
.git/sequencerの情報を使用して、進行中の操作の続行を行います。失敗したcherry-pickまたはrevertの競合を解決した後、続行するために使用できます。 -
--skip -
現在のコミットをスキップして、残りのシーケンスを続行します。
-
--quit -
進行中の今回の操作を忘れてください。チェリーピックまたはrevertに失敗した後、シーケンサーの状態をクリアするために使用できます。
-
--abort -
操作をキャンセルして、シーケンス操作前の状態に戻ります。
EXAMPLES
-
git cherry-pick master -
masterブランチの先端でコミットによって導入された変更を適用し、その変更で新しいコミットを作成します。
-
git cherry-pick ..master -
git cherry-pick ^HEAD master -
masterの祖先であるがHEADの祖先ではないすべてのコミットによって導入された変更を適用して、新しいコミットを生成します。
-
git cherry-pick maint next ^master -
git cherry-pick maint master..next -
maintまたはnextの祖先であるが、masterまたはその祖先のいずれでもないすべてのコミットによって導入された変更を適用します。 後者は
maintとmasterとnextの間のすべてを意味するものではないことに注意してください。 具体的には、masterに含まれている場合はmaintは使用されません。 -
git cherry-pick master~4 master~2 -
masterが指す最後から5番目と3番目のコミットによって導入された変更を適用し、これらの変更を使用して2つの新しいコミットを作成します。
-
git cherry-pick -n master~1 next -
作業ツリーとインデックスに、masterが指す最後から2番目のコミットとnextが指す最後のコミットによって導入された変更を適用しますが、これらの変更でコミットを作成しないでください。
-
git cherry-pick --ff ..next -
履歴が線形で、HEADがnextの祖先である場合は、作業ツリーを更新し、HEADポインターをnextに一致するように進めます。 それ以外の場合は、次のコミットで導入された変更を現在のブランチに適用し、新しい変更ごとに新しいコミットを作成します。
-
git rev-list --reverse master -- README | git cherry-pick -n --stdin -
READMEにアクセスしたmasterブランチのすべてのコミットによって導入された変更を作業ツリーとインデックスに適用します。これにより、結果を検査して、必要に応じて1つの新しいコミットにすることができます。
以下のシーケンスは、パッチのバックポートを試み、パッチが適用されるコードが大幅に変更されたためにベイルアウト(脱出; git reste)してから、再試行します。今度は、コンテキスト行の一致にさらに注意を払います。
$ git cherry-pick topic^ <1>
$ git diff <2>
$ git reset --merge ORIG_HEAD <3>
$ git cherry-pick -Xpatience topic^ <4>
-
git show topic^で表示される変更を適用します。 この例では、パッチが適切に適用されないため、競合に関する情報がインデックスと作業ツリーに書き込まれ、新しいコミット結果はありません。 -
調停する変更を要約します
-
チェリーピックをキャンセルします。 つまり、作業ツリーで行ったローカルの変更を保持したまま、チェリーピック前の状態に戻ります。
-
より多くの時間のを費やして、
topic^によって導入された変更を再度適用し、コンテキスト行の誤った一致に基づく間違いを避けようと試みます。
SEE ALSO
GIT
Part of the git(1) suite