Gitのチェリーピックを使う。EclipseでGitを使う(12)
はじめに
EclipseでGitを使う方法を説明していくシリーズの第12回目です。今回は「チェリーピック」を使っていきます。
チェリーピックとは何でしょうか?もともとは以下のような意味があるそうです。
チェリー・ピッキング (英: cherry picking) とは、数多くの事例の中から自らの論証に有利な事例のみを並べ立てることで、命題を論証しようとする論理上の誤謬、あるいは詭弁術。cherry-pickingの語義はサクランボの熟した果実を熟していないものから選別することであり、転じて「良い所だけを取る」「(特売品専門の)購買者」「つまみ食い」の意味で使用される。
しかし、ことGitにおいては「別ブランチのある特定コミットを自分のブランチに適用すること」を指します。
コミットを果実に見立て、欲しいところだけつまみ食いをする、ということなのですね。なかなかのネーミングセンスといったところでしょうか。
これまでのGit連載記事
- EclipseでGitを使う(1)Gitリモートリポジトリを構築する。
- EclipseでGitを使う(2)リモートリポジトリへプロジェクトをプッシュする。
- EclipseでGitを使う(3)リモートリポジトリのプロジェクトを取得する。
- EclipseでGitを使う(4)プッシュまでの流れをまとめる。
- EclipseでGitを使う(5)競合を解消する。
- EclipseでGitを使う(6)マージツールを使う。
- EclipseでGitを使う(7)コミットをリセットする。
- EclipseでGitを使う(8)プッシュをリセット(revert)する。
- EclipseでGitを使う(9)ブランチを作る。
- EclipseでGitを使う(10)ブランチをプッシュする。
- EclipseでGitを使う(11)ブランチをリベースする。
1.サブブランチを作成する。
サブブランチを作成しましょう。前回のブランチを流用して頂いても構いません。今回は、以下の構成で説明をしていきます。この通りでなくて構いませんので、サブブランチがある状態にしておきましょう。
masterブランチとsub1ブランチがあり、masterブランチとsub1ブランチで各々Sample12.javaを変更している状態です。
ソースは以下のようにしています。
≪masterブランチ(704ce19)≫
public class Sample12_1 { public static void main(String[] args) { System.out.println("12-1."); System.out.println("12-1. @master."); } }
≪sub1ブランチ。履歴1(b833b04)≫
public class Sample12_1 { public static void main(String[] args) { System.out.println("12-1."); System.out.println("12-2. @sub1"); } }
≪sub1ブランチ。履歴2(d40edef)≫
public class Sample12_1 { public static void main(String[] args) { System.out.println("12-1."); System.out.println("12-2. @sub1"); System.out.println("12-3. @sub1"); } }
2.チェリーピックを行う。
もし、masterブランチにsub1ブランチの履歴2の方をマージしたいのであれば、普通にマージを行ったり、またはリベースでもOKです。
そうではなく、sub1ブランチの履歴1の方をマージしたい場合に、チェリーピックが使えるわけです。
masterブランチをチェックアウトした状態で、sub1ブランチの履歴1の方を右クリックしてください。
上記のメニューが表示されますので、「チェリーピック」を選択しましょう。
すると以下のような確認ダイアログが出てきます。
OKを押します。
今回は競合が発生するようにしていました。以下のような競合が発生した旨を通知するダイアログが表示されます。
OKを押し、競合を解決しましょう。以下のようにソースを修正したら、ワークスペース同期化で「マージ済みとマーク」にします。
public class Sample12_1 { public static void main(String[] args) { System.out.println("12-1."); System.out.println("12-1. @master."); System.out.println("12-2. @sub1"); } }
競合が解消されていることを確認し、改めてコミットを行います。
競合が解消されていれば、コミットが成功します。
3.ヒストリーを確認する。
さて、チェリーピックが完了しましたので、ヒストリーを確認しましょう。
チェリーピックを行ったコミットに「CHERRY_PICK_HEAD」と表示され、「master」ブランチのコミット履歴の先頭に、
チェリーピック後の履歴が追加されていることが分かります。これにて、無事チェリーピックの完了です。
4.まとめ
今回はチェリーピックの手順を確認してみました。マージとそれほど大きな違いはありませんね。ただ、チェリーピックを行うようなことはそれほど多くはないでしょう。個人的には、最新でないのにマージすべき別ブランチのコミットが発生する時点で、別ブランチを作成しておくことの方がよいのではないかと思います。