公開:2025年8月4日

8分で読めます

git mergeコマンドの基本を徹底解説

この記事では、git mergeコマンドについてコマンドの基本的な使い方からリクエストコードまで解説します。

目次

  1. git mergeとは?

  2. git mergeコマンドの基本

  3. マージ先のブランチを準備する

  4. 最新のリモートコミットをフェッチする

  5. 早送りマージと3ウェイマージ

  6. git mergeによるコンフリクトの解決

  7. git mergeコマンドのベストプラクティス

  8. GitLabでgit mergeを使う

  9. git merge のFAQ

git mergeとは?

git mergeとは、分岐したブランチをmerge(マージ、統合すること)するコマンドのことです。別のリポジトリからの変更を組み込む際にも使われ、git pull(git fetchとgit mergeを組み合わせたもの)の一部としても機能します。チームで開発を実施するときなどにmainブランチから作業用ブランチを作り、テストをしてからマージ、プッシュすることも多いでしょう。

たとえば、main ブランチに基づいて作成された新しいブランチ’feature’があるとします。この feature ブランチを main にマージするのに使われるのがgit mergeコマンドです。

git mergeコマンドの基本

git mergeの基本的なコードは次のようになります。


git merge BRANCH_NAME

ブランチ名は、取り込みたいブランチの名前を入力します。

一見簡単そうですが、マージをスムーズに実行するにはいくつか準備が必要となりますので、次の章で確認しましょう。

マージ先のブランチを準備する

git status を実行して、HEAD が取り込む先のブランチであることを確認します。必要に応じて


git checkout BRANCH_NAME

を実行して、マージする先のブランチに切り替えます。

最新のリモートコミットをフェッチする

リモートで変更を加えたら、マージ先ブランチとマージ元ブランチに最新の変更内容を反映させます。その際は、git fetchとgit pullを使います。その後、リモートで加えた変更内容がmainブランチに反映されていることを確認します。

早送りマージと3ウェイマージ

早送りマージは、ブランチが分岐していない場合にのみ使えるコマンドです。早送りマージでは、マージ自体は行われませんが、ブランチの先頭とブランチの末尾の履歴を結合することで、旧ブランチからアクセスできたコミットが、新ブランチからも利用できるようになります。

強制的に早送りマージを実施する場合は以下のコードを使います(分岐がある場合など早送りマージができない場合にはエラーとなりマージはできません)


git merge --ff-only

一方、ブランチが分岐している場合には、早送りマージを適用することはできず、マージする手段は3ウェイマージに限られます。3ウェイマージは、3 つのコミット (2 つのブランチのそれぞれ先端のコミットと履歴を統合するために生成される専用のコミット)を使用してマージコミットを生成することから来ています。


git checkout BRANCH_NAME

を使うと、早送りマージが可能な時は早送りマージを実施し、できない時に3ウェイマージを実施します。

git mergeによるコンフリクトの解決

マージの基本を理解すると、同じ箇所を同時に更新してしまったらどうなるのか、という疑問を持たれる方もいるのではないでしょうか。この場合、Git側ではどちらを優先すべきか判断ができず、手作業でコンフリクトを解決することを求めます。

エラーメッセージは次のように表示されます。


git merge BRANCH_NAME

Auto-merging index.html

CONFLICT (content): Merge conflict in index.html

Automatic merge failed; fix conflicts and then commit the result.

コンフリクトを解決するまで、処理は中断されます。どのファイルでコンフリクトが発生してマージできなかったのを確認するにはgit status を実行します。


git status

未解決のコンフリクトについては unmerged として表示されます。標準的なコンフリクトマーカーがファイルに追加されるため、該当ファイルから修正できます。git addを実行して、コンフリクトが解決したことを Git に通知します。続いて通常の git commit を実行してマージ コミットを生成します。

git mergeコマンドのベストプラクティス

git mergeコマンドでよく起こる問題として、他のデベロッパーが加えた変更を破棄してしまうことが挙げられます。個々人がこまめにgit mergeを実行することで、変更を破棄してしまう問題は避けることができますが、マージそのもののコストが膨れ上がる可能性があります。複雑なコンフリクトが出ない場合に自動マージしてくれるようなツールの導入は、git mergeを使うチームの大きな手助けになるはずです。

GitLabでgit mergeを使う

git mergeのベストプラクティスとしてツールの使用をおすすめしましたが、GitLabなら自動マージ機能のほかにもリモートリポジトリのホスティング、インターフェースの提供、変更内容のコードレビュー、プッシュされたコードの自動ビルド、テスト、デプロイまでを一括で管理できます。

git mergeで起きるコンフリクトを自動で解決できるGitLabの無料トライアルはこちらからお申し込みいただけます。

git mergeコマンド のFAQ

git mergeコマンドとは何ですか?

git mergeとは、分岐したブランチをmerge(マージ、統合すること)するコマンドのことです。

mainブランチにマージするにはどうしたらいいですか?

まず、git checkout BRANCH_NAMEを使ってmainブランチに移動します。

次にgit merge BRANCH_NAMEを使ってマージしたいブランチを指定します。

マージ先ブランチ名)master\

マージするブランチ名)feature1の場合には


<code>git checkout master</code>

<code>git merge feature1</code>

\

となります。

git mergeとgit rebaseの違いは何ですか?

git mergeとgit rebaseはどちらもブランチを結合するコマンドです。mergeが新しいコミットを生成してコミット履歴が分散してしまうのに対し、rebaseはコミット履歴をひとつのブランチにまとめます。rebaseはログを整理する目的で使われることが多いですが、別のブランチで他のメンバーが加えた変更の履歴を消してしまう可能性などがあるので、上級者向けのコマンドといえます。

監修:知念 梨果 @rikachinen(GitLab合同会社 カスタマーサクセス本部 カスタマーサクセスエンジニア)

ご意見をお寄せください

このブログ記事を楽しんでいただけましたか?ご質問やフィードバックがあればお知らせください。GitLabコミュニティフォーラムで新しいトピックを作成してあなたの声を届けましょう。
Share your feedback

フォーチュン100企業の50%以上がGitLabを信頼

より優れたソフトウェアをより速く提供

インテリジェントなDevSecOpsプラットフォームで

チームの可能性を広げましょう。