Squash-Commits, die bereits in Git gepusht wurden

John Wachira 15 Februar 2024
Squash-Commits, die bereits in Git gepusht wurden

Dieser Artikel beschreibt den Prozess des Squashing von Commits, die wir bereits in das Remote-Repository gepusht haben. Wir quetschen Commits zu einem zusammen, um die Unordnung in unserem Repository zu reduzieren.

Um Commits zu squashen, führen wir im interaktiven Modus einen git rebase durch.

Squash-Commits, die bereits in Git gepusht wurden

Um den Kontext zu vereinfachen, simulieren wir ein Szenario, in dem wir nach dem Pushen von Änderungen einige Commits in einem zusammenfassen müssen.

Zuerst werden wir unsere aktuellen Änderungen in das Remote-Repository übertragen.

$ git push origin Dev2.1

Dieser Befehl wird alle Änderungen an unseren Remote-Zweig Dev2.1 übertragen.

Wir können den Befehl git rebase bis zum 5. Commit ausführen.

$ git rebase -i HEAD~5

Ausgang:

git rebase

Um unsere Commits zu squashen, ersetzen wir am Anfang der Commits pick durch squash und beenden die Rebase.

Wir können den Befehl git log ausführen, um unseren Commit-Verlauf anzuzeigen.

git log

Der Versuch eines Pushs führt zu einem Fehler, wie unten gezeigt.

error

Der Fehler ist selbsterklärend; wir werden nicht viel darauf eingehen.

Wir müssen einen Push erzwingen, nicht mit dem Flag --force, sondern wie unten gezeigt.

$ git push origin +Dev2.1

Ausgang:

git push origin

Werfen wir einen kurzen Blick auf das Remote-Repo auf GitHub.

Remote-Repo auf GitHub

Wir verwenden das + vor dem refspec, um in unserem Fall einen Push auf den Zweig Dev2.1 zu erzwingen.

Zusammenfassend lässt sich sagen, dass Ihnen nach dem Squashing von Commits, die Sie bereits auf die Fernbedienung gepusht haben, ein normaler git push nichts nützt.

Sie werden in einer lästigen Schleife stecken bleiben, in der Git von Ihnen verlangt, dass Sie ziehen, bevor Sie pushen. Das Hinzufügen des + vor Ihrem Zweig im Befehl git push origin löst das Problem.

John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

Verwandter Artikel - Git Squash