En Git, ¿cuál es la diferencia entre origin / master vs origin master?

290

Lo sé, origen es un término para el repositorio remoto y maestro es la rama allí.

A propósito estoy omitiendo el "contexto" aquí y espero que la respuesta no dependa del contexto. Entonces, en las líneas de comando de git, ¿cuál es la diferencia entre origin / master y origin master . ¿Hay una manera no ambigua de entender cuándo usar origin / master y cuándo debo usar origin master ?

Senthil Kumaran
fuente
1
posible duplicado de la ramificación
Gabriel Moretti

Respuestas:

390

En realidad, hay tres cosas aquí: origin masterson dos cosas separadas, y origin/masteres una cosa. Tres cosas en total.

Dos ramas:

  • master es una sucursal local
  • origin/masteres una rama remota (que es una copia local de la rama llamada "maestro" en el remoto llamado "origen")

Un control remoto:

  • origin es un control remoto

Ejemplo: tire en dos pasos

Como origin/masteres una rama, puede fusionarla. Aquí hay un tirón en dos pasos:

Paso uno, busca masterdesde el control remoto origin. Se buscará la masterrama originy se nombrará la copia local origin/master.

git fetch origin master

A continuación, se fusionan origin/masteren master.

git merge origin/master

Luego puede empujar sus nuevos cambios mastera origin:

git push origin master

Más ejemplos

Puede buscar varias ramas por nombre ...

git fetch origin master stable oldstable

Puedes fusionar múltiples ramas ...

git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290
Dietrich Epp
fuente
55
La primera parte es realmente útil. No pude conectar cómo se aplican más ejemplos, especialmente el de combinación. Gracias por la respuesta.
Senthil Kumaran
1
... porque cuando "git checkout origin / master" me pongo en un estado de cabeza separada. Si realmente tengo una copia local de la rama maestra remota, ¿por qué no puedo trabajar, comprometerme y agregarla? O tal vez pueda, pero ¿por qué está separado?
estu
3
Solo puede comprometerse con una sucursal local, por lo que cuando revisa una sucursal remota, obtiene "cabeza separada". Por supuesto, es una copia local de una rama remota, pero sigue siendo una rama remota. No hay ninguna regla de que "maestro" esté relacionado con "origen / maestro", podrían ser completamente diferentes.
Dietrich Epp
77
@ Jwan622 "origen es un control remoto" ... "origen" es solo un nombre, puede elegir cualquier nombre para controles remotos, pero "origen" es el nombre predeterminado. Un control remoto es un repositorio en otro lugar. Podría ser GitHub o podría ser una computadora diferente o incluso podría estar en otro lugar en la misma computadora.
Dietrich Epp
2
@ Jwan622: "git remote add" es un comando que crea un nuevo control remoto. "origen" es el nombre que agrega el control remoto. Como "origen" es solo un nombre, puede elegir un nombre diferente si lo desea. Por ejemplo, git remote add home my-server:projects/my-projectagrega un control remoto llamado "hogar". Es posible que desee consultar la documentación: git-scm.com/docs/git-remote
Dietrich Epp
16

origin/masteres una entidad (ya que no es una rama física) que representa el estado de la masterrama en el control remoto origin.

origin masteres la rama masteren el control remoto origin.

Entonces tenemos estos:

  • origen / maestro (una representación o un puntero a la rama remota)
  • maestro - ( rama real )
  • <Your_local_branch> ( rama real )
  • <Your_local_branch2> ( rama real )
  • <Your_local_branch3> ( rama real )

Ejemplo (en sucursal local 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
fuente
24
Esto es incorrecto ... origin masterno es una rama ... de hecho son dos cosas separadas, "origen" (un control remoto) y "maestro" (una rama local).
Dietrich Epp
El estado de la rama maestra remota está presente localmente, ¿verdad?
Senthil Kumaran
44
sí, esto es incorrecto origin/masteres la rama maestra remota. La sucursal local es solo el maestro.
Aniket Thakur
5

origin/masteres la masterrama remota

Por lo general, después de hacer una git fetch originpara traer todos los cambios desde el servidor, harías una git rebase origin/master, para cambiar los cambios y mover la rama al último índice. Aquí, origin/masterse refiere a la rama remota, porque básicamente le está diciendo a GIT que vuelva a basar la origin/masterrama en la rama actual.

Lo usarías origin masteral empujar, por ejemplo. git push origin masteres simplemente decirle a GIT que empuje al repositorio remoto la masterrama local .

Raul Rene
fuente
1
Esto parece estar realmente más cerca de lo que OP buscaba: origin masterdecirle al software que haga algo con lo que sea que esté en 'maestro' en el repositorio 'origen'. origin/masterEs una referencia de la misma manera f3a4d5o HEADes.
Nemesarial 01 de
4

origin es un nombre para la URL remota de git. Puede haber muchos más ejemplos de controles remotos a continuación.

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

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

en lo que respecta al origen / maestro (ejemplo bangalore / master), es puntero a "master" commit en el sitio de bangalore . Lo ves en tu clon.

Es posible que el bangalore remoto haya avanzado ya que ha hecho "recuperar" o "extraer"

forvaidya
fuente
2

Dado el hecho de que puede cambiar a origin/master(aunque en estado desconectado) mientras tiene el cable de red desconectado, debe ser una representación local de la mastersucursal en origin.

Martín
fuente
En las respuestas anteriores y posteriores, las personas dicen que origin / master es la rama maestra remota. Su respuesta es un poco contradictoria con lo que dicen. Por favor explique
Luna Lovegood