Git Squash Alle Commits auf einem Zweig

Stewart Nguyen 30 Januar 2023
  1. Git Soft-Reset Änderungen
  2. Fügen Sie die Änderungen wieder hinzu
  3. Commit
Git Squash Alle Commits auf einem Zweig

Dieser Artikel wird Anweisungen geben, um alle durchgeführten Commits in einem einzigen Commit zusammenzufassen.

Angenommen, wir haben eine Reihe von Commits in einem Feature-Branch vorgenommen, jetzt müssen wir ihn bereinigen, indem wir all diese Commits in diesem Branch in nur einem Commit gruppieren. Git nennt es Squashing.

Die Idee zum Squashing aller Commits ist wie folgt.

  1. Setzen Sie alle Änderungen mit einem Soft-Reset zurück.
  2. Fügen Sie die Änderungen wieder hinzu.
  3. Bestätigen Sie mit einer neuen Nachricht.

Git Soft-Reset Änderungen

Ein Soft-Reset macht alle Commits rückgängig, während neu hinzugefügte Dateien nicht entfernt werden.

Dazu müssen wir den Ursprungs-Commit finden, auf dem der Feature-Zweig basiert, was normalerweise der Name des Ursprungs-Zweigs ist, z. B. 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

In diesem Beispiel finden wir heraus, dass der Branch feature/long-features aus dem Commit-SHA 9265e3bd97863fde0a13084f04163ceceff9a9d0 ausgecheckt ist (oder aus dem Branch-Namen branch-off-from-tag-v1.0.0

Um alle Änderungen zurückzusetzen, verwenden Sie entweder git reset --soft 9265e3bd97863fde0a13084f04163ceceff9a9d0 oder 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

Die Option --soft gibt Git an, Commits zurückzusetzen und neue Dateien zu behalten.

Fügen Sie die Änderungen wieder hinzu

git add -A ist der zu verwendende Befehl

Die Option -A gibt an, dass alle Änderungen hinzugefügt werden.

Commit

Der letzte Schritt besteht darin, mit git commit -m <message> einen neuen Commit zu generieren.

$ 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

Verwandter Artikel - Git Squash