Git のチェリーピック
git cherry-pick
は任意の Git コミットを参照できるようにするとともに、現在作業中の HEAD にそのコミットを追加できる強力なコマンドです。チェリー ピックとは、あるブランチのコミットを別のブランチに適用する操作のことです。git cherry-pick
は変更を元に戻す際に便利です。たとえば、あるコミットを間違ったブランチに作成してしまったとします。チェリー ピックを実行すれば、正しいブランチに切り替えて、コミットを本来あるべき場所に付け替えられます。
Git チェリーピックを使うタイミング
git Cherry-pick
は便利なツールですが、どんな状況でも使えるわけではありません。チェリー ピックを実行するとコミットが複製されるため、チェリー ピックが使えるようなシナリオでも、従来のマージを使った方が良い場合が多くあります。つまり、git cherry-pick
は一部のシナリオのみで便利なツールなのです。
チームコラボレーション
チーム内の各メンバーがまったく同じコード、または類似するコードに取り組んでいることはよくあります。新しい製品機能にバックエンドとフロントエンドのコンポーネントがあるという場合も考えられます。2 つの製品部門で共有しているコードがあるかもしれません。また、フロントエンド開発者が利用したいと思っているデータ構造をバックエンド開発者が作成している場合もあります。フロントエンド開発者は git cherry-pick
を使って、仮想的なデータ構造が作成されたコミットを取得できます。こうすることで、フロントエンド開発者はプロジェクトで自分たちが担当している作業をそのまま続けられます。
関連資料
Git リポジトリ全体を移動する方法
ソリューションを見る
Bitbucket Cloud での Git の使用方法についてのチュートリアルです。
バグのホットフィックス
バグが見つかった場合は、いち早くユーザーに修正を提供することが重要です。たとえば、開発者が新しい機能に取り組み始めた状況を例に取ってみます。新しい機能の開発中に既存のバグが見つかりました。開発者は、このバグをパッチする明示的なコミットを作成します。この新しいパッチ コミットは、さらに多くのユーザーに影響が出る前に main
ブランチに直接チェリー ピックされてバグを修正します。
変更のやり直しと失われたコミットの復元
feature
ブランチが古くなり、main
ブランチにマージされない場合があります。また、プル・リクエストがマージされずに終了することもあります。Git ではこうしたコミットが失われることがなく、git log や git reflog などのコマンドでコミットを見つけ、チェリー・ピックして活用できます。
Git チェリーピックの使い方
git cherry-pick
の使い方を説明するために、次のようなブランチ状態のリポジトリがあると仮定します:
a - b - c - d Main
\
e - f - g Feature
git cherry-pick
の使い方はいたってシンプルで、次のように実行します:
git cherry-pick commitSha
このサンプルでは、commit
Sha はコミット参照です。git log
を使えば見つかります。また、サンプルではコミット「f」を main
に構築しています。まずは現在 main
ブランチにいることを確認します。
git checkout main
次に、以下のコマンドでチェリーピックを実行します:
git cherry-pick f
実行が完了すると、Git 履歴は次のようになります:
a - b - c - d - f Main
\
e - f - g Feature
f コミットが main ブランチに取り込まれています
Git チェリーピックの例
Git チェリー ピック
にはいくつかの実行オプションを渡せます。
-edit
-edit
オプションを渡すと、チェリー ピック操作前に git からコミット メッセージを求められます。
--no-commit
--no-commit
オプションはチェリー ピックを実行しますが、新しいコミットを作成するのではなく、対象コミットのコンテンツを現在のブランチの作業ディレクトリに移動します。
--signoff
--signoff
オプションは、オプションはチェリー ピック コミット メッセージの末尾に署名行を追加します。
git cherry-pick
には他にも役に立つオプションとして、さまざまなマージ用オプションが用意されています。これらのオプションについては、git merge 戦略のドキュメントを参照してください。
また、git cherry-pick はマージの競合を解決するオプション入力も受け付けます。たとえば、--abort --continue
と --quit
は git merge と git rebase ではより多くの機能を提供しています。
要約
チェリー ピッキングは強力で便利なコマンドで、一部のシナリオでは特に大きな効果を発揮します。git merge や git rebase の代わりに間違ってチェリー ピックを使わないようにしましょう。git log コマンドはチェリー ピックするコミットを探す際に使用します。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。