Git Squash Tous les commits sur une branche

Stewart Nguyen 30 janvier 2023
  1. Modifications de la réinitialisation logicielle de Git
  2. Rajoutez les modifications
  3. Commit
Git Squash Tous les commits sur une branche

Cet article donnera des instructions pour écraser tous les commits qui ont été effectués en un seul commit.

Supposons que nous ayons fait un tas de commits sur une branche de fonctionnalité, nous devons maintenant la nettoyer en regroupant tous ces commits sur cette branche en un seul commit. Git l’appelle écraser.

L’idée pour écraser tous les commits est la suivante.

  1. Réinitialisez toutes les modifications avec une réinitialisation logicielle.
  2. Rajoutez les modifications.
  3. Validez avec un nouveau message.

Modifications de la réinitialisation logicielle de Git

Une réinitialisation logicielle annulera tous les commits sans supprimer les fichiers nouvellement ajoutés.

Pour ce faire, nous devons trouver le commit d’origine où la branche de fonctionnalité est basée, qui est généralement le nom de la branche d’origine, comme 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

Dans cet exemple, nous découvrons que la branche feature/long-features est extraite à partir du commit SHA 9265e3bd97863fde0a13084f04163ceceff9a9d0 (ou à partir du nom de la branche branch-off-from-tag-v1.0.0.

Pour réinitialiser toutes les modifications, utilisez soit git reset --soft 9265e3bd97863fde0a13084f04163ceceff9a9d0 ou 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

L’option --soft spécifie à git de réinitialiser les commits et de conserver les nouveaux fichiers.

Rajoutez les modifications

git add -A est la commande à utiliser

L’option -A spécifie que toutes les modifications seront ajoutées.

Commit

La dernière étape consiste à utiliser git commit -m <message> pour générer un nouveau commit.

$ 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