(Hinweis: Als diese Frage ursprünglich gepostet wurde, war "master" der Standardname für Branches in Git. Da "main" jetzt der Standardname ist, wurde diese Antwort aktualisiert, um "main" zu verwenden, in der Hoffnung, dass dies für Git-Anfänger natürlicher ist.)
Es gibt hier eigentlich drei Dinge: origin main
sind zwei separate Dinge, und origin/main
ist eine Sache. Insgesamt drei Dinge.
Zwei Branches:
main
ist ein lokaler Branch
origin/main
ist ein Remote-Tracking-Branch (eine lokale Kopie des Branches mit dem Namen "main" im Remote mit dem Namen "origin")
Ein Remote:
Ist origin/main remote?
Der Branch origin/main
ist lokal! Jedes Mal, wenn du von origin
fetchst, wird origin/main
aktualisiert. Allerdings kann origin/main
veraltet sein, und es ist sogar möglich, dass main
nicht mehr auf origin
existiert. Du kannst die Option --prune
(-p
) mit git fetch
verwenden, um Remote-Tracking-Branches automatisch zu löschen, wenn der Branch, den sie verfolgen, gelöscht wird.
Der Branch origin/main
ist nicht eine Referenz oder ein Zeiger auf den Branch main
auf origin
. Es ist eine lokale Kopie.
Beispiel: Pull in zwei Schritten
Da origin/main
ein Branch ist, kannst du ihn mergen. Hier ist ein Pull in zwei Schritten:
Schritt Eins, fetch main
vom Remote origin
. Der Branch main
auf origin
wird geholt und die lokale Kopie wird origin/main
genannt.
git fetch origin main
Dann mergst du origin/main
in main
.
git merge origin/main
Dann kannst du deine Änderungen in main
zurück nach origin
pushen:
git push origin main
Weitere Beispiele
Du kannst mehrere Branches nach Namen fetchen...
git fetch origin main stable oldstable
Du kannst mehrere Branches mergen...
git merge origin/main hotfix-2275 hotfix-2276 hotfix-2290
Kannst du einen anderen Namen verwenden?
Mein lokaler Branch muss nicht zwangsläufig main
heißen, wenn ich das nicht möchte. Es muss nicht der gleiche Name wie der Remote-Branch sein! Angenommen, ich möchte meinen Branch alice
nennen, aber ihn trotzdem origin/main
verfolgen lassen:
Das kann ich ganz einfach tun:
git checkout -b alice --track origin/main
Du siehst, dass der lokale Branch alice
heißt, aber der Remote-Branch main
, und die lokale Kopie origin/main
ist. Das ist völlig in Ordnung! Es kann etwas verwirrend sein, aber vielleicht hast du bereits einen anderen Branch namens main
, und du musst auf einen anderen Branch wechseln, um an einer anderen Änderung zu arbeiten.