Was ist in Git der Unterschied zwischen origin / master und origin master?

290

Ich weiß, Ursprung ist ein Begriff für das Remote-Repository und Master ist der Zweig dort.

Ich lasse hier absichtlich den "Kontext" weg und hoffe, dass die Antwort nicht vom Kontext abhängt. Was ist also in Git-Befehlszeilen der Unterschied zwischen Origin / Master und Origin Master ? Gibt es eine eindeutige Methode, um zu verstehen, wann Origin / Master verwendet werden soll und wann ich Origin Master verwenden soll ?

Senthil Kumaran
quelle

Antworten:

390

Hier gibt es tatsächlich drei Dinge: Es origin mastergibt zwei verschiedene Dinge und es origin/masterist eine Sache. Insgesamt drei Dinge.

Zwei Zweige:

  • master ist eine lokale Niederlassung
  • origin/masterist ein Remote-Zweig (dies ist eine lokale Kopie des Zweigs mit dem Namen "master" auf dem Remote-Namen "origin").

Eine Fernbedienung:

  • origin ist eine Fernbedienung

Beispiel: In zwei Schritten ziehen

Da origin/masteres sich um einen Zweig handelt, können Sie ihn zusammenführen. Hier ist ein Zug in zwei Schritten:

Schritt eins, mastervon der Fernbedienung holen origin. Der masterZweig originwird abgerufen und die lokale Kopie wird benannt origin/master.

git fetch origin master

Dann verschmelzen Sie origin/mastermit master.

git merge origin/master

Dann können Sie Ihre neuen Änderungen masterzurückschieben auf origin:

git push origin master

Mehr Beispiele

Sie können mehrere Zweige nach Namen abrufen ...

git fetch origin master stable oldstable

Sie können mehrere Zweige zusammenführen ...

git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290
Dietrich Epp
quelle
5
Der erste Teil ist wirklich nützlich. Ich konnte nicht verbinden, wie Weitere Beispiele, insbesondere die Zusammenführung, anwendbar sind. Danke für die Antwort.
Senthil Kumaran
1
... weil ich beim "git checkout origin / master" in einen losgelösten Kopfzustand gerate. Wenn ich tatsächlich eine lokale Kopie des Remote-Master-Zweigs habe, warum kann ich dann nicht daran arbeiten und diese festschreiben und hinzufügen? Oder vielleicht kann ich, aber warum ist es losgelöst?
stu
3
Sie können nur einen lokalen Zweig festlegen. Wenn Sie also einen Remote-Zweig auschecken, erhalten Sie einen "abgetrennten Kopf". Natürlich ist es eine lokale Kopie eines Remote-Zweigs, aber es ist immer noch ein Remote-Zweig. Es gibt keine Regel, dass "Master" überhaupt mit "Ursprung / Master" zusammenhängt, sie könnten völlig unterschiedlich sein.
Dietrich Epp
7
@ Jwan622 "Ursprung ist eine Fernbedienung" ... "Ursprung" ist nur ein Name. Sie können einen beliebigen Namen für Fernbedienungen auswählen, aber "Ursprung" ist der Standardname. Eine Fernbedienung ist ein Repository an einem anderen Ort. Es könnte GitHub sein oder es könnte ein anderer Computer sein oder es könnte sogar irgendwo anders auf demselben Computer sein.
Dietrich Epp
2
@ Jwan622: "git remote add" ist ein Befehl, der eine neue Fernbedienung erstellt. "Ursprung" ist der Name, den die Fernbedienung hinzufügt. Da "Ursprung" nur ein Name ist, können Sie einen anderen Namen wählen, wenn Sie möchten. Fügt beispielsweise git remote add home my-server:projects/my-projecteine Fernbedienung mit dem Namen "home" hinzu. Sie können sich auf die Dokumentation beziehen: git-scm.com/docs/git-remote
Dietrich Epp
16

origin/masterist eine Entität (da es sich nicht um einen physischen Zweig handelt), die den Status des masterZweigs auf der Fernbedienung darstellt origin.

origin masterist der Zweig masterauf der Fernbedienung origin.

Also haben wir diese:

  • Ursprung / Master (Eine Darstellung oder ein Zeiger auf den entfernten Zweig)
  • Master - ( tatsächlicher Zweig )
  • <Ihre_lokale_Zweig> ( eigentliche Filiale )
  • <Ihre_lokale_Zweig2> ( tatsächlicher Zweig )
  • <Ihr_lokaler_Zweig3> ( tatsächlicher Zweig )

Beispiel (in der lokalen Niederlassung master):

git fetch # get current state of remote repository
git merge origin/master # merge state of remote master branch into local branch
git push origin master # push local branch master to remote branch master
Femaref
quelle
24
Dies ist falsch ... origin masterist kein Zweig ... es sind tatsächlich zwei getrennte Dinge, "Ursprung" (eine Fernbedienung) und "Master" (ein lokaler Zweig).
Dietrich Epp
Der Status des Remote-Master-Zweigs ist lokal vorhanden, oder?
Senthil Kumaran
4
ja das ist falsch origin/masterist remote master branch. Die lokale Niederlassung ist nur der Master.
Aniket Thakur
5

origin/masterist der entfernte masterZweig

Normalerweise führen Sie nach dem Ausführen von a git fetch origin, um alle Änderungen vom Server zu übernehmen, a aus git rebase origin/master, um Ihre Änderungen neu zu begründen und den Zweig auf den neuesten Index zu verschieben. Hier origin/masterbezieht sich auf den Remote-Zweig, da Sie GIT grundsätzlich anweisen, den origin/masterZweig auf den aktuellen Zweig umzustellen .

Sie würden origin masterzum Beispiel beim Schieben verwenden. git push origin masterweist GIT einfach an, den lokalen masterZweig an das Remote-Repository zu senden.

Raul Rene
quelle
1
Dies scheint tatsächlich dem am nächsten zu sein, wonach OP gesucht hat - es origin masterweist die Software an, etwas mit dem zu tun, was sich auf 'master' im 'origin'-Repository befindet. origin/masterist eine Referenz auf die gleiche Weise f3a4d5oder HEADist.
Nemesarial
4

origin ist ein Name für Remote-Git-URL. Es kann unten ein weiteres Beispiel für Fernbedienungen geben.

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

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

Was Origin / Master (Beispiel Bangalore / Master) betrifft, ist dies ein Zeiger auf das Commit "Master" auf der Bangalore- Site. Sie sehen es in Ihrem Klon.

Es ist möglich, dass Remote Bangalore fortgeschritten ist, seit Sie "holen" oder "ziehen" gemacht haben.

forvaidya
quelle
2

Angesichts der Tatsache, dass Sie wechseln können origin/master(obwohl im getrennten Zustand), während Ihr Netzwerkkabel abgezogen ist, muss es sich um eine lokale Darstellung der masterZweigstelle bei handeln origin.

Martin
quelle
In den Antworten oben und unten wird angegeben, dass origin / master der Remote-Master-Zweig ist. Ihre Antwort widerspricht dem, was sie sagen. Bitte erklären Sie.
Luna Lovegood