412 Stimmen

Im Git, was ist der Unterschied zwischen origin/master und origin master?

Ich weiß, origin ist ein Begriff für das entfernte Repository und master ist der Zweig dort.

Ich lasse absichtlich den "Kontext" hier aus und hoffe, dass die Antwort nicht vom Kontext abhängt. Also in den Git-Befehlszeilen, was ist der Unterschied zwischen origin/master und origin master. Gibt es eine eindeutige Möglichkeit zu verstehen, wann ich origin/master und wann ich origin master verwenden sollte?

535voto

Dietrich Epp Punkte 193178

(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:

  • origin ist 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.

29voto

Femaref Punkte 59547

origin/master ist eine Entität (da es sich nicht um einen physischen Branch handelt) die den Zustand des master Branches auf dem entfernten origin repräsentiert.

origin master ist der Branch master auf dem entfernten origin.

Also haben wir diese:

  • origin/master (Eine Repräsentation oder ein Zeiger auf den entfernten Branch)
  • master - (tatsächlicher Branch)
  • (tatsächlicher Branch)
  • (tatsächlicher Branch)
  • (tatsächlicher Branch)

Beispiel (im lokalen Branch master):

git fetch # Aktuellen Zustand des entfernten Repositories abrufen
git merge origin/master # Zustand des entfernten master Branches in lokalen Branch mergen
git push origin master # Lokalen Branch master in entfernten Branch master pushen

14voto

Raul Rene Punkte 9642

origin/master ist der entfernte master-Zweig

Normalerweise, nachdem Sie ein git fetch origin durchgeführt haben, um alle Änderungen vom Server zu holen, würden Sie ein git rebase origin/master durchführen, um Ihre Änderungen neu zu basieren und den Zweig auf den neuesten Index zu verschieben. Hier bezieht sich origin/master auf den entfernten Zweig, weil Sie im Grunde GIT sagen, den origin/master-Zweig auf den aktuellen Zweig neu zu basieren.

Sie würden zum Beispiel origin master beim Pushen verwenden. git push origin master sagt einfach GIT, den lokalen master-Zweig zum entfernten Repository zu pushen.

5voto

forvaidya Punkte 2745

Ursprung ist ein Name für die entfernte Git-URL. Es gibt viele weitere Remotes, wie im folgenden Beispiel.

bangalore => bangalore.example.com:project.git

boston => boston.example.com:project.git

Was origin/master (zum Beispiel bangalore/master) betrifft, handelt es sich um einen Zeiger auf den "master"-Commit auf der bangalore-Website. Du siehst es in deinem Klon.

Es ist möglich, dass sich das entfernte Bangalore weiterentwickelt hat, seit du "fetch" oder "pull" durchgeführt hast.

5voto

Martin Punkte 59

In Anbetracht der Tatsache, dass Sie zu origin/master wechseln können (wenn auch im abgetrennten Zustand), während Ihr Netzwerkkabel abgesteckt ist, muss es eine lokale Darstellung des master-Zweigs bei origin sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X