【Git】squashでコミットを纏めてmerge

git Git

1. 概要

 作業ブランチの開発が完了したらmainなど共有できるブランチに適用が必要です。そのときに行うのがマージ(merge)です。マージの方法はいくつが有りますが今回はsquashについて整理してみたいとおもいます。

 squashマージはコミットを一つに纏めてマージする方法です。次の例から確認できると思います。

2. squashマージの例

2.1 mainと作業ブランチを用意

三つのファイルを作成したmainブランチの一つ目のコミットを作成します。

~/work/devl/git_merge (main)$ git log --graph 
* <99a1f99> 2023-12-04 [Your Name]  (HEAD -> main) init

~/work/devl/git_merge (main)$ ls -l
total 0
-rw-r--r-- 1 twonine 197121 0 Dec  4 21:46 test_master_01.txt
-rw-r--r-- 1 twonine 197121 0 Dec  4 21:46 test_master_02.txt
-rw-r--r-- 1 twonine 197121 0 Dec  4 21:46 test_master_03.txt
~/work/devl/git_merge (main) $

2.2 作業ブランチ

作業ブランチの名前は”branchA-from-main”です。

~/work/devl/git_merge (branchA-from-main)$ git checkout -b branchA-from-main
Switched to a new branch 'branchA-from-main'

~/work/devl/git_merge (branchA-from-main)$

2.3 ファイルを作成して2個のコミットを作成

新規ファイルを作成。



コミットする
~/work/devl/git_merge (branchA-from-main)$ git commit -m "new file" ./test-branchA-01.text
[branchA-from-main 9ac4267] new file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test-branchA-01.text

~/work/devl/git_merge (branchA-from-main)$

新規ファイルをgitで管理下に置く。

~/work/devl/git_merge (branchA-from-main)$ git add ./test-branchA-01.text

コミットする。

~/work/devl/git_merge (branchA-from-main)$ git commit -m "new file" ./test-branchA-01.text
[branchA-from-main 9ac4267] new file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test-branchA-01.text

~/work/devl/git_merge (branchA-from-main)$

2個目のファイルを作成とコミットします。

~/work/devl/git_merge (branchA-from-main)
$ touch add ./test-branchA-02.text

~/work/devl/git_merge (branchA-from-main)
$ git add ./test-branchA-02.text

~/work/devl/git_merge (branchA-from-main)
$ git commit -m "2nd new file" ./test-branchA-02.text
[branchA-from-main dd04b9b] 2nd new file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test-branchA-02.text

~/work/devl/git_merge (branchA-from-main)
$

2.4 squashマージ

グラフで現在の状況を確認、ファイル作成の2個のコミットがあります、その2個のコミットを纏めてみたいと思います。”rebase -I”から2個のコミットを合体する方法もありますがここではsquashでまとめてみたいと思います。

マージ前の状況

~/work/devl/git_merge (branchA-from-main)
$ git graph
* <dd04b9b> 2023-12-04 [Your Name]  (HEAD -> branchA-from-main) 2nd new file
* <9ac4267> 2023-12-04 [Your Name]  new file
* <99a1f99> 2023-12-04 [Your Name]  (main) init

~/work/devl/git_merge (branchA-from-main)

mainブランチをcheckout

~/work/devl/git_merge (branchA-from-main)
$ git checkout main
Switched to branch 'main'

~/work/devl/git_merge (main)$

squashマージ

~/work/devl/git_merge (main)
$ git merge --squash branchA-from-main
Updating 99a1f99..dd04b9b
Fast-forward
Squash commit -- not updating HEAD
 test-branchA-01.text | 0
 test-branchA-02.text | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test-branchA-01.text
 create mode 100644 test-branchA-02.text

~/work/devl/git_merge (main)
$ git commit

『viのエディターウィンドウが開かれます』

[main 3776b2d] Squashed commit of the following:
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test-branchA-01.text
 create mode 100644 test-branchA-02.text

~/work/devl/git_merge (main)
$ git log --graph --date-order -C -M --pretty=format:"<%h> %ad [%an] %Cgreen%d%Creset %s" --all --date=short
* <3776b2d> 2023-12-04 [Your Name]  (HEAD -> main) Squashed commit of the following:
| * <dd04b9b> 2023-12-04 [Your Name]  (branchA-from-main) 2nd new file
| * <9ac4267> 2023-12-04 [Your Name]  new file
|/
* <99a1f99> 2023-12-04 [Your Name]  init

twonine@TwoNine01 MINGW64 ~/work/devl/git_merge (main)
$

squashマージ後の状況

~/work/devl/git_merge (main)$ git graph
* <3776b2d> 2023-12-04 [Your Name]  (HEAD -> main) Squashed commit of the following:
| * <dd04b9b> 2023-12-04 [Your Name]  (branchA-from-main) 2nd new file
| * <9ac4267> 2023-12-04 [Your Name]  new file
|/
* <99a1f99> 2023-12-04 [Your Name]  init

~/work/devl/git_merge (main)$

一番目のコミット”new file”と二番目のコミット”2nd new file”がsquashマージを実行したことでmainブランチに”Squashed commit of the following:…”の一個のコミットに纏められたことが確認できると思います。

※viが開かれるときの様子

Squashed commit of the following:

commit dd04b9bb0d400e7696f0f8204181449c179a51b5
Author: Your Name <you@example.com>
Date:   Mon Dec 4 22:07:21 2023 +0900

    2nd new file

commit 9ac4267b4b1a2c42d4e33616b153f4d566690134
Author: Your Name <you@example.com>
Date:   Mon Dec 4 22:03:41 2023 +0900

    new file

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch main
# Changes to be committed:
#       new file:   test-branchA-01.text
#       new file:   test-branchA-02.text
#
タイトルとURLをコピーしました