【Git入門】mergeコマンドで異なるブランチの変更内容を統合する

  • 2026.03.09
       
【Git入門】mergeコマンドで異なるブランチの変更内容を統合する

git を使って作業を行う場合、ブランチの内容を1つに統合する必要が出てくる時があります。
その際に使用するのが、git merge コマンドです。

今回の記事では、git merge コマンドを使用する具体的な方法について解説していきたいと思います。

git mergeとは?

git merge コマンドは、特定のブランチでコミットされた更新内容を別のブランチへと反映する際に使用するコマンドです。

Gitは基本的に、作業者や修正内容ごとにブランチを切って作業を行うのが一般的なため、最終的に修正内容をメインブランチへと反映させる必要があります。
その際に使用するのがこの mergeコマンドで、内容を取り込みたいブランチでコマンドを実行することにより、対象とするブランチの更新内容を実行元である作業ブランチに反映させることができます。

mergeコマンドの使い方

mergeコマンドの具体的な使用方法について見ていきましょう。

基本構文

mergeコマンドを使用する際は、取り込み先となるブランチに移動した後、以下の構文で実行します。

Bash
git merge ブランチ名

例えば、「ブランチBで行った作業内容をブランチAに取り込みたい」 といった場合、次のような手順になります。

Bash
# 取り込み先のブランチに移動
git switch ブランチA

# ブランチBをブランチAにマージ
git merge ブランチB

mergeした際に時折発生する「コンフリクト」とは?

ブランチの状態によっては、git merge コマンドを実行した際にコンフリクト(競合) が発生する場合があります。
コンフリクトとは、margeコマンドや rebaseコマンドなどでブランチの更新内容を統合する際に、ファイル内の同一箇所の編集をそれぞれのブランチで行っていると発生する競合状態のことを言います。

コンフリクトが発生すると、プログラム側では異なる変更内容をどのように統合するかを判断することができないため、コマンドの実行が中断されます。
この場合、該当箇所の変更内容をどのように残すかを編集し、ファイルの競合状態を解消しなければいけません。

コンフリクトの解消方法は、手動で該当箇所を編集する方法と、コマンドを使用して自動的に解消する2通りの方法があります。

手動でコンフリクトを解消する

まずは、手動でコンフリクトを解消する方法から見ていきましょう。

主な実行手順は、以下の3ステップとなります。

  1. コンフリクトが発生しているファイルを確認する
  2. ファイル内の更新内容を編集する
  3. 編集したファイルをコミットする

コンフリクトが発生している箇所を確認する

コンフリクトが発生すると、以下のようなエラー文が表示されます。

エラー例
Auto-merging sample.txt
CONFLICT (content): Merge conflict in sample.txt
Automatic merge failed; fix conflicts and then commit the result.

エラーの内容を見ると、「Merge conflict in sample.txt」 とあるように、sample.txt ファイルでコンフリクトが発生していることが分かります。
このように、コンフリクトが発生した場合はエラー文にあるファイルの中身を確認するようにしましょう。

また、git status コマンドでブランチの状態を表示することでも、コンフリクトが発生したファイルを確認することができます。

Bash
git status
On branch main
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
	both modified:   sample.txt

no changes added to commit (use "git add" and/or "git commit -a")

ファイル内を確認してコンフリクトを解消する

該当ファイルの確認が完了したら、実際にファイルを開いて更新内容を編集しましょう。

コンフリクトが発生すると、ファイル内の競合している箇所に、コンフリクトマーカーと呼ばれる表示が自動で追加されます。
コンフリクトマーカーには、以下のような形式で、マージ先のブランチ (作業ブランチ) の更新内容と、取り込み元のブランチの更新内容がそれぞれ記述されています。

コンフリクト例
<<<<<<< HEAD
sample1
=======
sample2
>>>>>>> branchB

更新内容を確認したら、最終的にコミットしたい部分のみを残して、その他の記述は削除しておきましょう。

sample2

編集が完了し、全てのコンフリクトが解消できたら、該当のファイルをコミットします。

Bash
# ステージングに追加
git add sample.txt

# 修正内容をコミット
git commit

ここまでが、コンフリクトが起きた場合の一連の流れとなります。

コンフリクト対象の片方を破棄して解消する

どちらか片方のブランチの内容のみを優先して取り込む場合に活用できるのが、git checkoutコマンドの 「–ours」 オプションと 「–theirs」 オプションです。
作業ブランチ側の内容を優先する場合は –ours オプション、取り込み元のブランチを優先する場合は –theirs オプションを付けてコマンドを実行します。

Bash
# 作業ブランチを優先
git checkout --ours [ファイル名]

# 取り込み元ブランチを優先
git checkout --theirs [ファイル名]

コマンドを実行することにより、指定したオプションの内容でコンフリクトを自動で解消してくれます。
複数のファイルをまとめて解消したい場合は、スペースを空けてファイル名を続けて記述します。

両方のブランチの内容を採用したい場合は手動で解消する必要があるため、使用できる場面はある程度限られてしまいますが、覚えておくと便利な方法です。

fast-forwardとno-fast-forward

基本的に、git merge コマンドを実行すると、マージが行われたことを示す新たなコミットが作成されます。
履歴にすると、以下のような状態です。

ところが、ケースによってはマージコミットが作成されず、以下のように一直線の履歴としてまとめられる場合があります。

【マージ前】

【マージ後】

このようなケースを、Fast-forwardマージと言います。
分岐点より後に作成されたコミットが、取り込み先のブランチに存在しない場合に発生するマージです。

-no-ffオプションでマージコミットを作る

上述したように、Fast-forwardマージの場合はマージコミットが作成されないのがデフォルトですが、ケースによってはコミット記録を明示的に残したい場合もあると思います。
その際に使用するのが、「–no-ff」 オプションです。

Bash
git merge --no-ff ブランチ名

–no-ff オプションを付けて実行することにより、Fast-forwardマージの場合でもコミットを作成することができます。
開発現場の運用ルールなどで記録を残す必要がある場合は、このオプションを付けてマージするようにしましょう。

まとめ

いかがでしたか?今回は、git merge コマンドを使用する方法について解説しました。

まだ Gitを使い慣れていないという方は、初めの内は少しややこしく感じてしまう作業かもしれませんが、頻繁に使用するコマンドなのでしっかりと使い方を理解しておくようにしましょう。

Gitの勉強方法は?

書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。

ただ、Gitに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。

プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。

<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~

このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。

     

Otherカテゴリの最新記事