HOWTO · Git

Git の異なるブランチからの変更を選択的にマージする

Git で特定のコミットをマージできます。

このページの内容

この記事では、あるブランチから別のブランチへの特定の変更のマージについて説明します。 ご存じのとおり、ブランチをマージするとき、Git はすべてのファイルを例外なくマージします。

ブランチにいくつかのコミットがあり、いくつかを選択して別のブランチにマージする必要があるというシナリオに遭遇する場合があります。 これを回避する方法を見てみましょう。

Git の異なるブランチからの変更を選択的にマージする

理解を深めるために、あるブランチから別のブランチにいくつかのコミットをマージする必要があるシナリオをシミュレートします。 これを回避する方法を次に示します。

例:

私たちのローカル リポジトリ Delftscopetech には、次の 2つのブランチがあります。

  1. Dev_Branch
  2. メイン

物事を可能な限り実用的にするために、修正が必要なバグがプロジェクトで見つかったと仮定します。 バグを修正した後、Main ブランチではなく Dev_Branch ブランチでチェックアウトされていることに気付きました。

通常のマージはプロジェクトを壊します。 私たちは何をしますか?

このようなシナリオでは、最初に git log コマンドを実行して Dev_Branch のコミット履歴を表示します。 必要な変更を含むブランチにいることを確認してください。

$ git checkout Dev_Branch

コミット履歴は次のとおりです。

$ git log --oneline

Dev_Branch のコミット履歴

次に、Main ブランチにマージするコミットを特定します。 Main ブランチのコミット履歴は次のとおりです。

$ git checkout Main
$ git log --oneline

メインブランチのコミット履歴

Main ブランチに次のコミットがないことがわかります。

  1. edcb8ae 2 回目のバグ修正
  2. cefb7bb 最初のバグ修正

2つのコミットをマージするには、git cherry-pick コマンドを使用して、2つのコミットのコミット ID をフィードします。 マージしたいブランチ、この場合は Main ブランチにチェックアウトされていることを確認してください。

$ git checkout Main

以下に示すように、cherry-pick を実行できるようになりました。

$ git cherry-pick edcb8ae cefb7bb

出力:

Git 選択的マージ出力

マージの競合がない場合は、上記の出力のような結果が得られるはずです。 マージを確認しましょう。

$ git log --oneline

マージの確認

出力は、Git が 2つの新しいコミットを作成したことを示しています。コミット ID は異なりますが、説明は同じです。 以下に示すように、git push コマンドを実行して、ブランチをリモート リポジトリにプッシュできます。

$ git push origin Main

要約すると、git cherry-pick コマンドのおかげで、Git で選択的にマージできます。 必要なのは、マージする変更のコミット ID だけであり、正しいブランチでチェックアウトされていることを確認します。