Git
It lets you copy just one specific commit from another branch into your current branch—like a precise, copy-and-paste for code changes.
git cherry-pick
これは何?
git cherry-pick は「他の枝(ブランチ)の特定の変更だけを、今いるブランチに持ってくる」コマンドです。
枝ごと全部は取り込まず、美味しい実(=欲しいコミット)だけを摘み取るイメージ。
ポイント
- 「ブランチを丸ごと統合」ではなく、コミット単位でコピーする
- コピーされた結果は新しいコミットとして作られる(ハッシュは元と別)
どんな時に使う?
- あるブランチで直した小さなバグ修正だけを、リリース用ブランチにも反映したい
- 機能開発の途中だけど、この1個のコミットだけ先に取り込みたい
いちばん短い使い方(単発)
- 取り込み先へ移動
- 取り込みたいコミットのハッシュを控える(例:
abc1234)
- 実行
これで、abc1234 の変更が 今いるブランチの先頭に新しいコミットとして追加されます。
複数コミットを順番に移す
古い順に並べて渡すのが安全・確実です。
git cherry-pick <old1> <old2> <newest>
(範囲指定もできますが、最初は 明示的に列挙するのがおすすめ)
便利オプション(最初に覚えるならこの2つ)
元コミット番号を残す(追跡しやすい)
git cherry-pick -x <commit>
→ コミットメッセージ末尾に「(cherry picked from …)」が自動で付く
まずはステージだけして、まとめてコミットしたい
git cherry-pick -n <commit> # = --no-commit
→ 複数を -n で集めて、最後に自分のメッセージで1回コミット
コンフリクトになったら
- 衝突ファイルを直し、解決済みにする
- 続行
git cherry-pick --continue
- どうしても無理なら中止
(特定の1件だけ飛ばしたい時は --skip)
よくある落とし穴(ここだけ意識)
- 履歴が増える
- コピーなので新しいコミットが1つ増える(元とハッシュは違う)
- 重複取り込みに注意
- 同じ変更を別ルートで取り込むと、同内容が二重になることがある
- マージコミットは難しい
- 最初は単一コミットを対象にするのが吉(マージコミットは上級者向け)
他の操作との違い(ざっくり)
- merge
- ブランチを丸ごと合わせる
- rebase
- ブランチの並び替え・付け替え
- cherry-pick
- 欲しいコミットだけピンポイントで持ってくる
小さな実務メモ
- 取り込み元がリモートなら先に
git fetch して最新化
- 取り込み先に未コミット変更があると失敗しやすい → 先にコミット or
git stash