Git のマージ機能

マージとは

さきほどはブランチを活用することで他のブランチに影響を与えることなく作業をすることができるとお伝えしました。
しかし、作成したブランチはあくまで開発用ブランチなので、作業が完了したら納品物となる main ブランチにその変更内容を反映させる必要があります。 このようにあるブランチに他のブランチの変更内容を反映させる作業をマージ(統合)といいます。 merge-1.png

マージは git merge コマンドで行うことできますが、変更履歴を更新したいブランチで実行することに注意してください。
git merge コマンドの後ろに変更内容を取得したいブランチ名を指定します。

git merge [変更内容を取得したいブランチ名]

マージをしてみよう

今回は main ブランチに develop ブランチの変更内容を反映させてみましょう。
まずは git branch コマンドを実行して、main ブランチが作業ブランチになっていることを確認しましょう。
※ 今回は変更履歴を更新したいブランチ = main ブランチです。

  develop
* main

続いて以下の git merge コマンドを実行します。変更内容を取得したいブランチ名は develop を指定しましょう。

git merge develop

以下のようなメッセージが表示されればマージは成功です!

Updating 5db36ee..1be05c7
Fast-forward
 sample.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

それでは、マージ後の main ブランチの内容を確認してみましょう。
まずは cat コマンドで sample.txt の中身を確認してみましょう。
以下のように develop ブランチの内容に変わっていることが確認できます。

HELLO

続いて、git log コマンドでコミットログを確認しましょう。
main ブランチのコミットログに対して、develop ブランチでコミットログが追加されていることが確認できます。

commit 1be05c74b8ae9ce1f8b1a09510b1367c88e1100e (HEAD -> main, develop)
Author: corgi9n <arapon1015@gmail.com>
Date:   Fri Mar 11 11:21:55 2022 +0900

    develop commit

commit 0336368ff10d1f69849cd5beeda1cf1ed274bb6d
Author: corgi9n <arapon1015@gmail.com>
Date:   Fri Mar 11 03:54:55 2022 +0900

    second commit

commit 5c670db6fc4a8d109a5e2724c421cd8105c2598f
Author: corgi9n <arapon@gmail.com>
Date:   Fri Mar 11 03:44:55 2022 +0900

    first commit

なお、マージ後もリポジトリ内には作業ブランチは残ります。
そのため、マージ後に git checkout コマンドを実行することで同じ作業ブランチで作業を続けることができます。
しかし、マージするとたいていの作業ブランチは不要になり、リポジトリ内に不要な作業ブランチが溜まっていくことになります。 このようなときは不要なブランチを削除するようにしましょう。 git branch コマンドのオプション(-d)を使用することでブランチを削除することができます。

git branch -d [削除したいブランチ名]

今回は develop ブランチを削除してみましょう。

git branch -d develop
Deleted branch develop (was 1be05c7).

本当に develop ブランチを削除できているかを git branch コマンドで確認してみましょう。
以下のように develop ブランチが表示されなければ成功です!

* main

このようにして作業用のブランチでの変更内容を他のブランチに反映させることができます。
ここではローカルリポジトリ内でのマージを行いましたが、実際の開発では以下のようなフローになります。
※作業ブランチの名前が develop である場合のフローです。

  1. リモートリポジトリの main ブランチから最新のソースを取得する。(git pull origin main
  2. ローカルリポジトリで作業用ブランチ(develop)を作成する。(git branch develop
  3. 作成した作業用ブランチ(develop)に切り替える。(git checkout develop
  4. 作業用ブランチでファイルを編集したファイルをステージングエリアにあげる。(git add
  5. ステージングエリアにあるファイルの差分を履歴として記録(コミット)する。(git commit
  6. リモートリポジトリに作業用ブランチ(develop)を作成して、
    コミット履歴をアップロードする。(git push origin develop
  7. リモートリポジトリの作業用ブランチ(develop)の内容を、リモートリポジトリの main ブランチにマージする。

merge-2.png

最後の「リモートリポジトリの作業用ブランチの内容を、リモートリポジトリの main ブランチにマージする。」は、
ローカルリポジトリではなくリモートリポジトリで行うことができます。
こちらは次の GitHub のプルリクエスト機能 でご紹介します。