git merge コマンドで複数のブランチをマージする方法

git merge コマンドで複数のブランチをマージする方法

Gitコマンドの一つ、git merge は複数のブランチの内容を合流(合併)させるコマンドです。リモートリポジトリの内容をローカルリポジトリに取り込む際や、複数のブランチで開発を行い最後に変更内容を統合する際に必ず使います。

目次

git merge の使い方

実際に git merge コマンドを使ってみましょう。

リモートリポジトリの内容をローカルリポジトリに取り込む

Git でリモートリポジトリの内容をローカルリポジトリに取り込む流れは下記のようになります。

リモートリポジトリ
↓ git fetch
ローカルリポジトリ(origin/master)
git merge
ローカルの作業ディレクトリ(master)

このうちローカルリポジトリの origin/master ブランチに取り込んだ変更内容を、作業ディレクトリに結びついている master ブランチに反映させるコマンドが git merge です。

今回はあらかじめリモートリポジトリから git fetch コマンドでローカルリポジトリに変更内容を取り込んでおきました。

git fetch コマンドでリモートリポジトリの内容をローカルリポジトリに取り込む方法

git merge origin/master

これで現在のブランチに origin/master ブランチをマージすることができました。

作業ディレクトリの内容がリモートのものと同じになっています。

用意した複数のブランチをマージする

複数人でのチーム開発ではブランチを分けてそれぞれの開発を行い、テストが完了した段階で変更内容をメインの master ブランチに取り込むことで一つのプロジェクトにまとめ直すのが一般的です。

master ブランチに 今回あらかじめ用意しておいたsub1 ブランチをマージしてみましょう。

まずは master ブランチに移動します。

git checkout master

下記のコマンドを実行して sub1 ブランチの内容をマージします。

git merge sub1

実行結果は以下の通りです。

これで sub1 ブランチの内容を master ブランチにマージすることができました。

git mergeを実行する場合の注意点

複数のブランチを合流させる git merge はたびたびコンフリクトなどの問題を引き起こすことがあります。しっかりと理解して使いましょう。

コミットが済んでいないファイルを残したまま git merge しない

コミットが済んでいない状態で git merge を実行すると、ブランチの変更内容が反映されないままマージしてしまいます。

全てのコミットを済ませた状態で実行しましょう。

ブランチの状態は git status コマンドで確認できます。

git statusコマンドでファイルのステータスを確認する方法

衝突(コンフリクト)が発生した場合

同じファイルの同じ個所を複数の開発者が修正した状態で git merge を実行すると、衝突(コンフリクト)が発生する場合があります。

その場合「CONFLICT」というエラーメッセージとともに、変更が衝突したファイル名が表示されますので修正し、コミットし直してからマージしましょう。

マージを元に戻す(取り消す)方法

マージ自体を元に戻す(取り消す)には下記のコマンドを実行します。

マージ後、まだコミットしていない場合

git reset --hard HEAD

マージ後、コミット済みの場合

git reset --hard ORIG_HEAD

git merge で使用可能なオプション

git merge コマンドにつけられるオプションには下記のようなものがあります。

マージを中断する

git merge --abort

コンフリクトが生じ、まだコミットが行われていない状態で、マージを中断して git merge 実行前の状態に戻します。

マージを再開する

git merge --continue

コンフリクトが生じ、コードを編集して競合を解決した後に、マージを完了するように指示します。

自動マージ方針を指定

git merge -ours
git merge -theirs

Git に自動マージさせる際に競合を解決するヒントを与えます。

  • -ours:強制的に現在チェックアウトしているブランチの変更を優先
  • -theirs:マージするように指定したブランチの変更を優先
このエントリーをはてなブックマークに追加

コメントを残す

頂いたコメントは一読した後表示させて頂いております。
反映まで数日かかる場合もございますがご了承下さい。