In Git, qual è la differenza tra origin / master e origin master?


290

Lo so, origine è un termine per il repository remoto e master è il ramo lì.

Sto volutamente omettendo il "contesto" qui e spero che la risposta non dipenda dal contesto. Quindi, nelle righe di comando di git, qual è la differenza tra origin / master e origin master . Esiste un modo non ambiguo per capire quando usare origin / master e quando dovrei usare origin master ?


Risposte:


390

In realtà ci sono tre cose qui: origin mastersono due cose separate ed origin/masterè una cosa. Tre cose in totale.

Due rami:

  • master è una filiale locale
  • origin/masterè un ramo remoto (che è una copia locale del ramo denominato "master" sul telecomando denominato "origine")

Un telecomando:

  • origin è un telecomando

Esempio: tirare in due passaggi

Poiché origin/masterè un ramo, puoi unirlo. Ecco un pull in due passaggi:

Primo passo, recupera masterdal telecomando origin. Il masterramo originattivo verrà recuperato e la copia locale verrà denominata origin/master.

git fetch origin master

Poi si uniscono origin/masterin master.

git merge origin/master

Quindi puoi inviare masternuovamente le tue nuove modifiche a origin:

git push origin master

Più esempi

Puoi recuperare più rami per nome ...

git fetch origin master stable oldstable

Puoi unire più rami ...

git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290

5
La prima parte è davvero utile. Non riuscivo a collegare come Altri esempi, in particolare quello di fusione è applicabile. Grazie per la risposta.
Senthil Kumaran,

1
... perché quando "git checkout origin / master" vado in uno stato di testa staccato. Se effettivamente ho una copia locale del ramo master remoto, perché non posso lavorare, impegnarmi e aggiungerlo? O forse posso, ma perché è staccato?
martedì

3
Puoi impegnarti solo in una filiale locale, quindi quando esci da una filiale remota, ottieni "capo distaccato". Certo, è una copia locale di un ramo remoto, ma è ancora un ramo remoto. Non esiste alcuna regola secondo cui "master" sia in alcun modo correlato a "origin / master", potrebbero essere completamente diversi.
Dietrich Epp,

7
@ Jwan622 "origin è un telecomando" ... "origin" è solo un nome, puoi scegliere qualsiasi nome per i telecomandi ma "origin" è il nome predefinito. Un telecomando è un repository altrove. Potrebbe essere GitHub o potrebbe essere un computer diverso o potrebbe anche essere altrove sullo stesso computer.
Dietrich Epp,

2
@ Jwan622: "git remote add" è un comando che crea un nuovo telecomando. "origine" è il nome che il telecomando aggiunge. Poiché "origine" è solo un nome, puoi scegliere un nome diverso, se lo desideri. Ad esempio, git remote add home my-server:projects/my-projectaggiunge un telecomando chiamato "home". Si consiglia di fare riferimento alla documentazione: git-scm.com/docs/git-remote
Dietrich Epp

16

origin/masterè un'entità (poiché non è un ramo fisico) che rappresenta lo stato del masterramo sul telecomando origin.

origin masterè il ramo mastersul telecomando origin.

Quindi abbiamo questi:

  • origine / master (una rappresentazione o un puntatore al ramo remoto)
  • master - ( ramo effettivo )
  • <Your_local_branch> ( ramo effettivo )
  • <Your_local_branch2> ( ramo effettivo )
  • <Your_local_branch3> ( ramo effettivo )

Esempio (nella filiale locale 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

24
Questo non è corretto ... origin masternon è un ramo ... in realtà sono due cose separate, "origine" (un telecomando) e "master" (un ramo locale).
Dietrich Epp

Lo stato del ramo principale remoto è presente localmente, giusto?
Senthil Kumaran,

4
sì, questo non è corretto origin/masterè il ramo principale remoto. La filiale locale è solo il maestro.
Aniket Thakur,

5

origin/masterè il masterramo remoto

Di solito dopo aver eseguito un git fetch originper portare tutte le modifiche dal server, si dovrebbe fare un git rebase origin/master, per reimpostare le modifiche e spostare il ramo all'indice più recente. Qui, si origin/mastersta riferendo al ramo remoto, perché sostanzialmente stai dicendo a GIT di rifare il origin/masterramo sul ramo corrente.

Si userebbe origin masterquando si spinge, per esempio. git push origin mastersta semplicemente dicendo a GIT di inviare al repository remoto il masterramo locale .


1
Questo sembra effettivamente essere il più vicino a ciò che OP stava cercando - origin mastersta dicendo al software di fare qualcosa con qualunque cosa sia su "master" nel repository "origin". origin/masterè un riferimento allo stesso modo f3a4d5o HEADè.
Nemesarial

4

origin è un nome per git url remoto. Di seguito possono esserci molti altri telecomandi.

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

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

per quanto riguarda origin / master (esempio bangalore / master), è un puntatore al commit "master" sul sito di bangalore . Lo vedi nel tuo clone.

È possibile che il bangalore remoto sia avanzato da quando hai fatto "recupero" o "estrazione"


2

Dato che è possibile passare a origin/master(sebbene in stato distaccato) mentre il cavo di rete è scollegato, deve essere una rappresentazione locale della mastersuccursale in origin.


Nelle risposte sopra e sotto, le persone dicono che origin / master è il ramo master remoto. La tua risposta è in qualche modo in contraddizione con quello che dicono. Per favore, spiega.
Luna Lovegood,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.