Git Squash ブランチのすべてのコミット

Stewart Nguyen 2023年1月30日
  1. Git ソフトリセットの変更
  2. 変更を追加し直す
  3. コミット
Git Squash ブランチのすべてのコミット

この記事では、実行されたすべてのコミットを 1つのコミットにまとめる手順を説明します。

機能ブランチで多数のコミットを行ったとすると、このブランチのすべてのコミットを 1つのコミットにグループ化してクリーンアップする必要があります。Git はそれを押しつぶしと呼んでいます。

すべてのコミットを潰すためのアイデアは次のとおりです。

  1. ソフトリセットですべての変更をリセットします。
  2. 変更を追加し直します。
  3. 新しいメッセージでコミットします。

Git ソフトリセットの変更

ソフトリセットは、新しく追加されたファイルを削除せずに、すべてのコミットを元に戻します。

そのためには、機能ブランチのベースとなるオリジンコミットを見つける必要があります。これは通常、main などのオリジンブランチの名前です。

$ git log
commit a856ee456967a942ab379b27a4839962f88b92ce (HEAD -> feature/long-features)
Author: Cuong Nguyen
Date:   Mon Dec 27 20:53:18 2021 +0700

    Feature 2.3

commit 6f1599a18691906ed148dc40d2d290aaeceeaa5c
Author: Cuong Nguyen
Date:   Mon Dec 27 20:53:03 2021 +0700

    Subfeature 2

commit 94e35bae85f395c62fdaaa1aeaedbb11d2c94375
Author: Cuong Nguyen
Date:   Mon Dec 27 20:52:39 2021 +0700

    Subfeature 1

commit 9265e3bd97863fde0a13084f04163ceceff9a9d0 (grafted, tag: v1.0.0, branch-off-from-tag-v1.0.0)
Author: Cuong Nguyen
Date:   Sun Dec 19 19:33:07 2021 +0700

    Merge pull request #1 from stwarts/feature/shared-branch

この例では、ブランチ feature/long-features がコミット SHA 9265e3bd97863fde0a13084f04163ceceff9a9d0(またはブランチ名 branch-off-from-tag-v1.0.0 からチェックアウトされていることがわかります。

すべての変更をリセットするには、git reset --soft 9265e3bd97863fde0a13084f04163ceceff9a9d0 または git reset --soft branch-off-from-tag-v1.0.0 のいずれかを使用します

$ git reset --soft 9265e3bd97863fde0a13084f04163ceceff9a9d0
$ git status
On branch feature/long-features
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   sub_feature_1.txt
	new file:   sub_feature_2.txt

--soft オプションは、コミットをリセットして新しいファイルを保持する git を指定します。

変更を追加し直す

git add -A は使用するコマンドです

-A オプションは、すべての変更が追加されることを指定します。

コミット

最後のステップは、git commit -m <message> を使用して新しいコミットを生成することです。

$ git commit -m 'Squash 3 commits into 1'
[feature/long-features 8cc336c] Squash 3 commits into 1
 2 files changed, 2 insertions(+)
 create mode 100644 sub_feature_1.txt
 create mode 100644 sub_feature_2.txt
$ git log
commit 8cc336c6d1b2e6ed55470f99b040d6835ec655e5 (HEAD -> feature/long-features)
Author: Cuong Nguyen <cuong.nguyen@oivan.com>
Date:   Mon Dec 27 21:07:54 2021 +0700

    Squash 3 commits into 1

commit 9265e3bd97863fde0a13084f04163ceceff9a9d0 (grafted, tag: v1.0.0, branch-off-from-tag-v1.0.0)
Author: Nguyễn Phú Cường <npcuong.011308@gmail.com>
Date:   Sun Dec 19 19:33:07 2021 +0700

    Merge pull request #1 from stwarts/feature/shared-branch

関連記事 - Git Squash