[ローカルGit]ブランチ分けしたものを統合する[merge]

マージして分岐した変更履歴を
1本に戻す

前回 一つの作業フォルダ内の変更履歴を分岐(ブランチ)させて、
下の図のような履歴をつくる事まで出来ました。
今回はbrh01で作った変更点をmasterブランチへも適用させて、
masterブランチ1本へ統合させるマージをコマンドで作業していこうと思います。

マージ(Conflictなし)する

マージする時に主に使うコマンドはこちら

コマンド 説明
git checkout <branchName> 作業ブランチを<brancheName>へ切り替える
git merge <branchName> 現在の作業ブランチへ<branchName>の内容をマージする

↑ masterブランチへ brh02ブランチを統合(マージ)。
このブランチ同士ではConflict(競合)が無いので自動的にマージ完了。

git merge 〇〇〇 実行時にマージ時のコミットコメントを求められるので、
適宜変更して保存。
(gitが自動的に作成したメッセージが1行目にある)

マージ(Conflictあり)する

ブランチマージをするとConflict(競合)が発生する事があります。

Conflictが発生する条件は、同じファイルへの各ブランチで違う変更を行っている。です。
テキストファイルを例にすると、
同じファイルの同じ行へ違う編集をしている。とか

一方のブランチでは消されたファイルに、もう一方では編集を追加しているなど。ですね。

マージコマンドを実行すると、
Conflictなしの場合と違い、競合発生したファイルが表示されたり、
マージが完了していないと表示されます。

競合を解決する

git mergeで競合発生したファイルは、
どのように統合するのかは手作業で処理する必要があります。

今回はテキストファイルで競合しているので、テキストエディタでファイルの中身をみて
競合を解消していこうと思います。

git mergeコマンド実行後に、競合発生したファイルの中身を見ると
書いた覚えが無い『<<<<<<< HEAD ~ ======= ~ >>>>>>> 〇〇〇』の記述が増えています。

各ブランチで異なって編集されている箇所が『<<<<<<< HEAD ~ >>>>>>> 〇〇〇』に書かれているので、この部分を最終的にこう残しておきたい!という内容にすればOKです。
↓編集後

競合していたファイルを全て変更終えた後は、変更したファイルをステージに追加。
あとはConflictなしと同じようにコミットを進めてマージ完了となります。

不要なブランチを削除する

マージし終わっても、マージしたブランチは残っています。
意図せずにブランチ切り替えして作業をしないように、
不要になったブランチは削除しておきます。

コマンド 説明
git branch -d <branchName> <branchName>ブランチを削除する

まとめ

今日はブランチを統合(マージ)とブランチの削除。
マージ時に競合が発生した際の解決をやっていきました。

使ったコマンドはこちら

コマンド 説明
git checkout <branchName> 作業ブランチを<brancheName>へ切り替える
git merge <branchName> 現在の作業ブランチへ<branchName>の内容をマージする
git branch -d <branchName> <branchName>ブランチを削除する

競合発生時に解決していきましたが、
ファイルの中身が短く、競合箇所も少なかったのでテキストエディタで解決できました。
1ファイルで競合箇所が多数ある場合はテキストエディタのみでは大変なので、
差分表示ツールを使えるように設定しようと思います。

コメント