Gitのブランチマージとマージで発生するコンフリクトを解決する方法
Gitのブランチをマージすると、別々のブランチで開発されたコードを統合して新しいブランチに結合することができます。 ブランチマージには次のコマンドを使います。
git merge <ブランチ名>
マージ手順
-
マージされる側のブランチに切り替える
git switch main
-
マージコマンドを実行する
git merge feature-branch
-
リモートにコミットをpushする
git push --all origin
ブランチの削除
通常、マージ後に不要になったブランチは削除します。
-
マージしたローカルのブランチを削除する
git branch -d feature-branch
-
リモートのブランチを削除する
git push origin --delete feature-branch
fast-forward時のマージログ
git merge
でブランチが先行して進んでいた場合(fast-forwardマージ)、Merge branch
のログは追加されません。
fast-forwardマージ時にMerge branch
ログを追加する場合は、マージ時に--no-ff
オプションを付けてマージコマンドを実行します。
git merge --no-ff feature-branch
マージを取り消す
まだリモートへpush
していない場合のみ。
git reset --hard HEAD^
リモートにpush
していた場合。この場合、マージを取り消したログも追加されます。
git revert -m 1 HEAD
ブランチがマージ済みかどうかを確認する
git branch
コマンドを使用して、どのブランチがマージされたかを確認できます。
マージ済みブランチを表示
git branch --merged
まだマージされていないブランチを表示
git branch --no-merged
コンフリクト発生時
以下ではGitでブランチをマージする際に発生するコンフリクトの解消方法について解説します。Gitでマージを行うときにコンフリクトが発生することはよくあることですが、本記事を参考にしっかりと対処することでスムーズにマージを完了することができます。
コンフリクト発生時は次のようなメッセージが表示されます。
Auto-merging <ファイル名>
CONFLICT (content): Merge conflict in <ファイル名>
Automatic merge failed; fix conflicts and then commit the result.
この状態でgit status
コマンドを実行すると、次のようにUnmerged pathsが表示されます。
On branch master
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: <ファイル名>
コンフリクトの解消方法
-
エディタなどを使ってコンフリクトの発生したファイルを修正する
-
次のコマンドを実行し、コンフリクトしているファイルをステージングする
git add <ファイル名>
この状態で
git status
コマンドを実行すると次のように表示されるOn branch master All conflicts fixed but you are still merging. (use "git commit" to conclude merge)
-
全てのコンフリクトファイルを修正・ステージングしたら、次のコマンドを実行してマージを完了する
git commit
または
git merge --continue