できない.dev

cherry-pick

別名: git cherry-pick / チェリーピック

git cherry-pick は、特定のコミットが持つ変更内容だけを取り出して現在のブランチに適用するコマンド。
ブランチ全体を統合する merge と違い、必要な 1 コミットだけを別ブランチへ運べる。

公開: 更新:

定義

cherry-pick は、指定したコミットの差分だけを現在のブランチに適用する Git のコマンドです。
コミットそのものを移動するのではなく、同じ変更内容を持つ新しいコミットを作り直します。
「修正コミット 1 本だけをリリースブランチにも入れたい」といった場面で使われます。

詳細

git cherry-pick 1a2b3c4
git cherry-pick A^..C   # 範囲を連続適用

適用元と現在のブランチで同じ行が触られていると衝突します。
衝突したらファイルを編集して git add し、git cherry-pick --continue で再開します。
やめる場合は git cherry-pick --abort で開始前の状態に戻ります。
マージコミットを対象にするときは、どちらの親を基準にするかを -m で指定する必要があります。

よくある誤解

cherry-pick はコミットを「移動」しません。
元ブランチにコミットは残り、適用先には別のハッシュを持つコミットが増えます。
そのため同じ変更が両方の履歴に現れ、後でブランチをマージすると同一箇所を二重に持つ形になって衝突することがあります。

関連

衝突の解消手順は Git cherry-pick でコンフリクトが解決できない にまとめています。
履歴の付け替えという意味では rebase と近い操作です。

この記事は役立ちましたか?