Git Push verstehen und Anwendungsfälle
Das Pushing in Git bedeutet, dass lokale Commits in ein Remote-Repository übertragen werden. Dadurch werden deine Änderungen für andere sichtbar und das Projekt bleibt synchron. Während git push lokale Änderungen hochlädt, ruft git pull Updates vom Remote ab und integriert sie in deinen aktuellen Branch. Dieses Zusammenspiel von Push und Pull ist entscheidend, um Beiträge in verteilten Workflows zu verwalten. In diesem Leitfaden wird erklärt, wie git push in Szenarien wie GitHub, Bare-Repositories und Force-Push-Workflows funktioniert – inklusive Beispielen und den gängigen Optionen wie -u
, --tags
und --force
.
Schnellreferenz Beispiele
# lokalen main-Branch ins origin-Remote pushen
$ git push origin main
# den dev-Branch pushen und mit origin/dev für zukünftige Pushes verknüpfen
$ git push -u origin dev
# alle lokalen Git-Tags ins Remote hochladen
$ git push --tags
# den Branch old-feature im Remote löschen
$ git push --delete origin old-feature
Dies sind die am häufigsten verwendeten Push-Befehle in Git. Im Folgenden wird erläutert, wie sie funktionieren und wann sie sinnvoll eingesetzt werden.
Änderungen zu GitHub pushen
Der Befehl git push überträgt deine lokalen Commits in ein Remote-Repository wie GitHub. Damit wird der Remote-Branch auf den neuesten Stand gebracht und deine Mitwirkenden sehen die Änderungen.
Befehls-Syntax
git push [OPTIONEN]
- <REMOTE>: Meistens origin, der Standardname für das Remote.
- <BRANCH>: Der Branch, der aktualisiert werden soll, z. B. main oder feature/login.
- [OPTIONEN]:
-u / --set-upstream
: Legt das Standard-Remote und den Branch für künftige Pushes fest.-f / --force
: Ersetzt die Historie des Remote-Branches durch die lokale.--all
: Pusht alle lokalen Branches.--tags
: Pusht alle annotierten Tags.
Befehlsschritte
Alle Dateien im Arbeitsverzeichnis zum Commit vormerken:
$ git add .
Eine bestimmte Datei vormerken:
$ git add <dateiname>
Änderungen mit einer Nachricht committen:
$ git commit -m "Neue Funktion hinzugefügt"
Überprüfen, ob das Remote konfiguriert ist:
$ git remote -v
Beispielausgabe:
origin git@github.com:username/repository.git (fetch)
origin git@github.com:username/repository.git (push)
In den Branch main pushen und diesen als Standard für künftige Pushes festlegen:
$ git push -u origin main
Beispielausgabe:
Branch 'main' set up to track remote branch 'main' from 'origin'.
Ab jetzt reicht der Befehl:
$ git push
Änderungen in Bare-Repositories pushen
Ein Bare-Repository ist ein Git-Repository ohne Arbeitsverzeichnis. Es enthält nur die Versionshistorie und dient meist als zentrales Repository auf einem Server. Entwickler können Code daraus pushen oder pullen, aber keine Dateien direkt bearbeiten.
Schritte zum Pushen in ein Bare-Repository
Per SSH mit dem Server verbinden:
$ ssh benutzername@server_ip
Zum Speicherort der Repositories wechseln:
$ cd /pfad/zu/deinen/repositories/
Ein neues Bare-Repository anlegen:
$ git init --bare dein-projekt.git
Beispielausgabe:
Initialized empty Git repository in /root/git-repos/dein-projekt.git/
SSH-Sitzung beenden:
$ exit
Auf dem lokalen System das Bare-Repository als Remote hinzufügen:
$ git remote add bare-server benutzername@server_ip:/pfad/zu/deinen/repositories/dein-projekt.git
Konfiguration überprüfen:
$ git remote -v
Beispielausgabe:
bare-server benutzer@server:/pfad/zu/dein-projekt.git (fetch)
bare-server benutzer@server:/pfad/zu/dein-projekt.git (push)
Den lokalen master-Branch ins Bare-Repository pushen:
$ git push bare-server master
Beispielausgabe:
To server:/pfad/dein-projekt.git
* [new branch] master -> master
Force Push Änderungen
Ein Force Push wird eingesetzt, wenn sich die lokale Branch-Historie von der des Remotes unterscheidet – typischerweise nach dem Zusammenfassen von Commits, einem Rebase oder dem Umschreiben der Historie. Mit einem Force Push wird der Remote-Branch an den lokalen Stand angepasst.
Warnung
Das Flag --force
überschreibt die Historie des Remote-Branches. Verwende es nur, wenn du sicher bist, dass niemand anderes Änderungen gepusht hat. Für eine sicherere Zusammenarbeit empfiehlt sich --force-with-lease
, das versehentliches Überschreiben verhindert.
Falls du nach einem Rebase, Squash oder einem geänderten Commit die Remote-Historie überschreiben musst, verwende einen der folgenden Force-Push-Befehle.
Den lokalen Branch erzwingen, um die Remote-Historie zu überschreiben:
$ git push --force origin main
Eine sicherere Variante nutzen, um Änderungen anderer nicht zu überschreiben:
$ git push --force-with-lease origin main
--force-with-lease
wird nur ausgeführt, wenn der Remote-Branch noch dem lokalen Stand entspricht.
Falls du den letzten Commit mit folgendem Befehl geändert hast:
$ git commit --amend
dann aktualisiere den Remote-Branch, um den geänderten Commit widerzuspiegeln:
$ git push --force-with-lease origin main
Fazit
Du hast gelernt, wie man lokale Commits mit git push sowohl nach GitHub als auch in Bare-Repositories überträgt – einschließlich dem Vormerken von Änderungen, dem Setzen von Upstream-Branches, dem Überprüfen der Remote-Konfiguration und dem Einsatz von Force Push, wenn nötig. Mit diesen Vorgehensweisen kannst du deine lokale Arbeit zuverlässig mit Remotes synchronisieren und eine saubere, kollaborative Git-Historie beibehalten.