HOWTO · Git

Unterschied zwischen Git Push Origin und Git Push Origin Master

In diesem Artikel werden die Unterschiede zwischen den Befehlen git push origin und git push origin master beschrieben.

Auf dieser Seite

git push origin master gibt den lokalen Branch master an, der zum Remote origin übertragen werden soll. Bei git push origin fehlt dagegen der Branch-Name. Welche Referenzen übertragen werden, hängt daher von push.default ab: Im Modus simple wird der aktuelle Branch zu seinem Upstream übertragen, sofern die erforderlichen Prüfungen für Tracking und Branch-Namen erfolgreich sind. Im Modus matching können mehrere lokale Branches übertragen werden, wenn es auf origin Branches mit denselben Namen gibt. Verwenden Sie den Befehl mit Branch-Namen, um gezielt master auszuwählen. Prüfen Sie vor dem Befehl ohne Branch-Namen den konfigurierten Modus und welche Branches er auswählt.

Einen benannten Branch mit git push origin master übertragen

Der Befehl git push origin master wählt ausdrücklich den lokalen Branch master aus und überträgt ihn zu origin. Welcher Branch gerade ausgecheckt ist, ändert diese Auswahl nicht: Auch wenn Sie sich auf feature befinden, bezeichnet der Befehl weiterhin master. Der Remote-Branch wird entsprechend der Push-Refspec aktualisiert. Daraus folgt nicht, dass master der Hauptbranch des Projekts ist; anstelle von master können Sie einen anderen Namen für einen lokalen Branch einsetzen.

Mit git push origin feature wählen Sie beispielsweise ausdrücklich feature aus. Gibt es auf dem Remote noch keinen Branch mit diesem Namen, kann Git die Remote-Referenz beim Push anlegen, sofern der Remote den Push akzeptiert. Für die Auswahl des Quell-Branchs ist der Upstream des aktuellen Branchs nicht erforderlich.

Den aktuellen Branch mit git push origin übertragen

Fehlt das Branch-Argument, verwendet Git das konfigurierte Verhalten von push.default. Der Befehl ist daher nicht zwingend auf den ausgecheckten Branch beschränkt und setzt auch nicht immer dessen Upstream voraus. Im Modus simple überträgt Git den aktuellen Branch zu seinem Upstream, wenn ein Upstream eingerichtet ist und die Prüfungen für den Branch-Namen erfolgreich sind. Im Modus matching überträgt Git lokale Branches, für die es auf dem Remote bereits gleichnamige Branches gibt. Ein einzelnes git push origin kann dadurch mehrere Branches aktualisieren; ausgewählt werden sie nicht anhand des Upstreams des aktuellen Branchs. Prüfen Sie den Modus mit git config --get push.default und die Branch-Verfolgung mit git branch -vv, bevor Sie sich auf einen Push ohne Branch-Angabe verlassen.

Das eigenständige Beispiel erstellt einen lokalen Bare-Remote und ein Arbeitsrepository. Anschließend überträgt es master über den Branch-Namen und den getrackten aktuellen Branch mit git push origin. Die Konfiguration gilt nur im temporären Repository. Das Beispiel können Sie lokal ausführen; hier wird keine Ausgabe behauptet.

set -eu

root=$(mktemp -d)
trap 'rm -rf "$root"' EXIT
remote="$root/origin.git"
repo="$root/work"

git init --bare -q "$remote"
git init -q -b master "$repo"
git -C "$repo" config user.name "Example User"
git -C "$repo" config user.email "example@example.com"
git -C "$repo" config push.default simple
git -C "$repo" remote add origin "$remote"
printf 'first commit\n' > "$repo/README.md"
git -C "$repo" add README.md
git -C "$repo" commit -q -m "Add README"
git -C "$repo" push -q origin master

git -C "$repo" switch -q -c feature
printf 'feature work\n' > "$repo/feature.txt"
git -C "$repo" add feature.txt
git -C "$repo" commit -q -m "Add feature"
git -C "$repo" push -q --set-upstream origin feature
git -C "$repo" push -q origin

git --git-dir="$remote" for-each-ref --format='%(refname:short)' refs/heads | sort

Den passenden Befehl auswählen

Befehl Auswahl des Branchs Was zu prüfen ist
git push origin master Der ausdrücklich angegebene lokale Branch master Prüfen Sie, ob master der Branch ist, den Sie übertragen möchten.
git push origin mit push.default=simple Der aktuelle Branch und sein Upstream, sofern Tracking und die Prüfungen des Branch-Namens erfolgreich sind Prüfen Sie den Upstream, den Namensabgleich und den konfigurierten Modus.
git push origin mit push.default=matching Jeder lokale Branch, zu dem es auf origin einen gleichnamigen Branch gibt; das können mehrere sein Prüfen Sie vor dem Push alle passenden Branch-Namen auf dem Remote.

Wählen Sie die Form mit Branch-Namen, wenn Sie gezielt einen bestimmten Branch übertragen möchten. Verwenden Sie die Form ohne Branch-Namen erst, nachdem Sie push.default geprüft haben: simple wählt den aktuellen Branch aus und prüft dessen Upstream-Beziehung, während matching mehrere Branches anhand ihrer Namen auswählen kann. Ist unklar, welche Branches betroffen sind, prüfen Sie vor dem Push den aktuellen Branch mit git branch --show-current, die Branch-Verfolgung mit git branch -vv und den Push-Modus mit git config --get push.default.