プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

Git cherry-pickの使い方をステップバイステップで解説

開発を始めたばかりの頃、多くの人はgitのコマンドを繰り返し使う中で自然と覚えていきます。git pull、git push、git commitといった基本的なコマンドの意味はすぐに理解できるでしょう。しかし、規模の大きいプロジェクトに参加し、チームで開発するようになると、コードベースのバージョン管理履歴を整理された状態に保つために、より高度なgitコマンドを学ぶ必要が出てきます。

そのようなコマンドの一つが「git cherry-pick」です。このコマンドは、あるブランチから特定のコミットだけを取り出し、別のフィーチャーブランチやmasterブランチのHEADに適用したい場合に使用します。

Git cherry-pickとは?

cherry-pickは、グループ作業にたとえると分かりやすいでしょう。グループプロジェクトでは、各メンバーが担当セクションを持ち、最後にそれらを一つにまとめます。プロジェクト全体の流れを良くするために、あるセクションの一部を切り取って、別のセクションに組み込むことがありますよね。

これこそがまさにgit cherry-pickの動作です。つまり、あるフィーチャーブランチから1つまたは複数のコミットを取り出し、それを新しいコミットとして別のブランチに追加します。具体的な仕組みを見ていきましょう。

Git cherry-pickの使い方をステップバイステップで解説

上の図は、gitで管理されているプロジェクトの2つのブランチを表しています。アルファベットはそれぞれのブランチ上で行われた個々のコミットを示し、破線は古いものから新しいものへと続く履歴を表しています。以下の手順に従いながら、2つのブランチの構造と動きをイメージしてみてください。

git cherry-pickの手順

各gitコミット(図中のアルファベット)を1つの「サクランボ」と考えてください。各コミットには固有のハッシュが紐づいています。ハッシュとは、コミットに関連付けられた指紋のような一意の識別子のことです。このハッシュを使って、対象の「サクランボ」を摘み取り、別のブランチへ追加することになります。

  1. git checkout <コミットを取得したいブランチ名>
    まず、コミット(サクランボ)を摘み取りたいブランチにチェックアウトします。
  2. git reflog
    gitの参照ログであるreflogは、最近の操作履歴を記録しています。以下はgit reflogの出力例です。
    % git reflog
    bf654bb (HEAD -> master, origin/master) HEAD@{0}: commit: 直前のコミットメッセージ
    2394353 HEAD@{1}: commit: 2つ前のコミット時点のHEAD
    b4b51eb HEAD@{2}: commit: 3つ前のコミット時点のHEAD


    大規模なチームで作業している場合は、日付や時刻、コミットした作者などの情報も含まれることがあります。ここでは、コミットハッシュ、コミットが行われたブランチ、実行されたアクション、実際のコミットメッセージが確認できます。

    別のブランチに追加したいコミットが特定できたら、そのハッシュを控えておきましょう。ハッシュとは、この例の各行の先頭にある英数字の文字列のことです。
  3. git checkout <コミットを追加したいブランチ名>
    ハッシュを控えたら、コミットを追加したいブランチに切り替えます。
  4. git cherry-pick [-x] <コミットハッシュ>
    git cherry-pickコマンドにコミットハッシュを指定して実行すると、そのコミットが対象ブランチの作業ツリーに追加されます。公開ブランチからcherry-pickを行う場合は-xフラグを付けるのがおすすめです。このフラグを付けると、元のコミットからcherry-pickしたことを示す注釈がコミットメッセージに自動的に追記されます。

cherry-pick実行後のダイアグラムをもう一度見てみましょう。

Git cherry-pickの使い方をステップバイステップで解説

この例で選んだ「サクランボ」、つまりコミットは「C」です。上記の手順を実行すると、選択したコミット「C」が2つ目のブランチの履歴に新しいコミットとして追加されていることが分かります。

最後に:押さえておきたい注意点

仕上げとして、元のコミットにノート(notes)が付けられていた場合は、それをコピーしておきましょう。次のコマンドを使用します。

git notes copy <cherry-pickしたコミットハッシュ> <新しいコミットハッシュ>

また、cherry-pickの結果としてマージコンフリクトが発生する可能性があるため、必ず解決しておいてください。

本記事では、git cherry-pickという高度なgitコマンドの使い方について解説しました。あるブランチから特定のコミットを取り出して別のブランチに追加したい場面で、ぜひ活用してみてください。

  1. Javaコンパイラ入門:仕組みの解説と初心者におすすめのオンラインIDE

    5〜10年前、Javaを学ぶのは今ほど手軽なことではありませんでした。当時は、コンパイラとインタプリタを含むJava Development Kit(JDK)をダウンロードし、自分のマシン上で実行環境を整える必要がありました。しかし現在では、無料で利用できるJavaコンパイラがオンライン上に数多く存在します。この記事では、Java言語のコンパイルの仕組みと、練習やプロジェクト作成に活用できるオンラインツールについて詳しく解説します。 Javaプログラムはどのように実行されるのか? Javaは完全なコンパイル型言語ではありません。しかし、かといって完全なインタプリタ型言語でもありません。 ここ

  2. jQueryのfind()メソッドとは?初心者向けステップバイステップ解説

    jQueryのfind()メソッドという名前は聞き覚えがあるかもしれませんが、JavaScriptのfind()メソッドと混同しないよう注意が必要です。どちらも「見つける」ためのメソッドですが、返す結果はまったく異なります。 JavaScriptのfind()メソッドは、配列に対してのみ呼び出せるメソッドです。引数として渡され後から実行される「コールバック関数」を受け取り、そのコールバック関数で定義された条件を満たす最初の要素を見つけて返します。 一方、jQueryのfind()メソッドは大きく性質が異なります。すべてのjQueryメソッドと同様にセレクターに対して呼び出され、そのセレクタ