git cherry-pick 対話式解説ガイド

特定のコミットだけを、あなたのブランチに連れてくる方法

1. `cherry-pick`とは?

`git cherry-pick`は、**他のブランチにある特定のコミット1つだけ**を、現在のブランチにコピーして取り込むためのコマンドです。ブランチ全体をマージ(統合)したくはないけれど、その中の一部の変更だけが必要な場合に非常に役立ちます。

🌳

例えるなら「リンゴのつまみ食い」

隣の木になっているリンゴ(コミット)の中から、一番美味しそうなもの1つだけを収穫して、自分のカゴ(現在のブランチ)に入れるようなイメージです。

2. 仕組み

`cherry-pick`はコミットを「移動」させるのではなく、「コピー」します。具体的には、以下の処理が行われます。

  1. 指定されたコミットの**変更内容(パッチ)**を抽出します。
  2. 現在のブランチの先頭に、その変更内容を適用します。
  3. 同じ変更内容を持つ**新しいコミット**を作成します。この新しいコミットは、元のコミットとは異なるコミットハッシュ値を持ちます。

3. インタラクティブ・シミュレーション

`feature`ブランチで修正された「重大なバグ」のコミットだけを、`main`ブランチに取り込んでみましょう。

main ブランチ

feature ブランチ

1. `feature`ブランチからコミットを選択

コミットが選択されていません

操作ログがここに表示されます...

4. 主なユースケース

緊急のバグ修正(ホットフィックス)

開発中のブランチで行ったバグ修正を、すぐに本番環境用の`main`ブランチにも適用したい場合。

機能の一部だけを先行リリース

大きな機能開発ブランチの中から、完成した一部のコミットだけを先にリリース用ブランチに取り込みたい場合。

不要なマージコミットを避ける

他のブランチの変更を少しだけ取り込みたいが、そのためだけにブランチ全体をマージしたくない場合。

間違ったブランチへのコミット修正

間違ったブランチにコミットしてしまった際に、そのコミットを正しいブランチにコピーし、元のコミットをリセットで取り消す場合。

5. 注意点

コミットの重複

`cherry-pick`は新しいコミットを作成するため、後で元のブランチをマージすると、同じ変更内容を持つコミットが歴史上に2つ存在することになります。これにより、歴史が少し読みにくくなる可能性があります。

コンフリクト(競合)

取り込もうとしているコミットの変更内容が、現在のブランチのコードと競合(コンフリクト)する場合があります。その際は、手動でコンフリクトを解決する必要があります。