公開:2025年8月4日
8分で読めます
この記事では、git mergeコマンドについてコマンドの基本的な使い方からリクエストコードまで解説します。
git mergeとは、分岐したブランチをmerge(マージ、統合すること)するコマンドのことです。別のリポジトリからの変更を組み込む際にも使われ、git pull(git fetchとgit mergeを組み合わせたもの)の一部としても機能します。チームで開発を実施するときなどにmainブランチから作業用ブランチを作り、テストをしてからマージ、プッシュすることも多いでしょう。
たとえば、main ブランチに基づいて作成された新しいブランチ’feature’があるとします。この feature ブランチを main にマージするのに使われるのがgit mergeコマンドです。
git mergeの基本的なコードは次のようになります。
git merge BRANCH_NAME
ブランチ名は、取り込みたいブランチの名前を入力します。
一見簡単そうですが、マージをスムーズに実行するにはいくつか準備が必要となりますので、次の章で確認しましょう。
git status を実行して、HEAD が取り込む先のブランチであることを確認します。必要に応じて
git checkout BRANCH_NAME
を実行して、マージする先のブランチに切り替えます。
リモートで変更を加えたら、マージ先ブランチとマージ元ブランチに最新の変更内容を反映させます。その際は、git fetchとgit pullを使います。その後、リモートで加えた変更内容がmainブランチに反映されていることを確認します。
早送りマージは、ブランチが分岐していない場合にのみ使えるコマンドです。早送りマージでは、マージ自体は行われませんが、ブランチの先頭とブランチの末尾の履歴を結合することで、旧ブランチからアクセスできたコミットが、新ブランチからも利用できるようになります。
強制的に早送りマージを実施する場合は以下のコードを使います(分岐がある場合など早送りマージができない場合にはエラーとなりマージはできません)
git merge --ff-only
一方、ブランチが分岐している場合には、早送りマージを適用することはできず、マージする手段は3ウェイマージに限られます。3ウェイマージは、3 つのコミット (2 つのブランチのそれぞれ先端のコミットと履歴を統合するために生成される専用のコミット)を使用してマージコミットを生成することから来ています。
git checkout BRANCH_NAME
を使うと、早送りマージが可能な時は早送りマージを実施し、できない時に3ウェイマージを実施します。
マージの基本を理解すると、同じ箇所を同時に更新してしまったらどうなるのか、という疑問を持たれる方もいるのではないでしょうか。この場合、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で起きるコンフリクトを自動で解決できるGitLabの無料トライアルはこちらからお申し込みいただけます。
git mergeとは、分岐したブランチをmerge(マージ、統合すること)するコマンドのことです。
まず、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はどちらもブランチを結合するコマンドです。mergeが新しいコミットを生成してコミット履歴が分散してしまうのに対し、rebaseはコミット履歴をひとつのブランチにまとめます。rebaseはログを整理する目的で使われることが多いですが、別のブランチで他のメンバーが加えた変更の履歴を消してしまう可能性などがあるので、上級者向けのコマンドといえます。
監修:知念 梨果 @rikachinen(GitLab合同会社 カスタマーサクセス本部 カスタマーサクセスエンジニア)