En Git, ¿cuál es la diferencia entre origen/maestro y origen maestro?

Resuelto Senthil Kumaran asked hace 11 años • 7 respuestas

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

Estoy omitiendo deliberadamente 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 ? ¿Existe una forma no ambigua de entender cuándo usar origin/master y cuándo debo usar origin master ?

Senthil Kumaran avatar Aug 09 '13 05:08 Senthil Kumaran
Aceptado

( Nota: cuando se publicó originalmente esta pregunta, "maestro" era el nombre predeterminado para las ramas en Git. Dado que "principal" ahora es el nombre predeterminado, esta respuesta se actualizó para usar "principal", con la esperanza de que así sea. más natural para las personas nuevas en Git.)

En realidad hay tres cosas aquí: origin mainson dos cosas separadas y origin/maines una cosa. Tres cosas en total.

Dos ramas:

  • maines una sucursal local
  • origin/maines una rama de seguimiento remoto (que es una copia local de la rama denominada "principal" en la rama remota denominada "origen")

Un control remoto:

  • origines un control remoto

¿El origen/principal es remoto?

¡ La origin/mainsucursal es local! Cada vez que lo recojas origin, origin/mainse actualizará. Sin embargo, origin/mainpuede estar desactualizado e incluso es posible que mainya no exista origin. Puede usar la --pruneopción ( -p) con git fetchpara eliminar automáticamente las ramas de seguimiento remoto si se elimina la rama que rastrean.

La origin/mainrama no es una referencia ni un puntero a la mainrama en origin. Es una copia local.

Ejemplo: tirar en dos pasos

Como origin/maines una rama, puedes fusionarla. Aquí hay un extracto en dos pasos:

Paso uno, buscar maindesde el control remoto origin. Se recuperará la mainrama y se nombrará la copia local .originorigin/main

git fetch origin main

Luego te fusionas origin/maincon main.

git merge origin/main

Luego puede enviar sus nuevos cambios mainnuevamente a origin:

git push origin main

Más ejemplos

Puede buscar varias ramas por nombre...

git fetch origin main stable oldstable

Puedes fusionar varias ramas...

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

¿Puedes usar un nombre diferente?

No es necesario nombrar mi sucursal local mainsi no lo deseo. ¡No es necesario que tenga el mismo nombre que la sucursal remota! Digamos que quiero ponerle un nombre a mi sucursal alice, pero aún tengo un seguimiento origin/main:

Puedo hacerlo con bastante facilidad:

git checkout -b alice --track origin/main

Puede ver que la rama local tiene nombre alice, pero la rama remota tiene nombre mainy la copia local es origin/main. ¡Esto está totalmente bien! Puede resultar un poco confuso, pero tal vez ya tenga una rama diferente llamada mainy necesite cambiar a una rama diferente para trabajar en un cambio diferente.

Dietrich Epp avatar Aug 08 '2013 22:08 Dietrich Epp

origin/masteres una entidad (ya que no es una sucursal física) que representa el estado de la mastersucursal 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 )
  • <Tu_sucursal_local> ( sucursal real )
  • <Your_local_branch2> ( sucursal real )
  • <Your_local_branch3> ( sucursal 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 avatar Aug 08 '2013 22:08 Femaref

origin/masteres la mastersucursal remota

Por lo general, después de hacer a git fetch originpara traer todos los cambios del servidor, harías a git rebase origin/masterpara cambiar la base de tus cambios y mover la rama al índice más reciente. Aquí, origin/masternos referimos a la rama remota, porque básicamente le estás diciendo a GIT que cambie la base de la origin/masterrama a la rama actual.

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

Raul Rene avatar Aug 08 '2013 22:08 Raul Rene

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

bangalore => bangalore.ejemplo.com:proyecto.git

boston => boston.ejemplo.com:proyecto.git

en lo que respecta a origen/maestro (ejemplo bangalore/master), es un puntero a la confirmación "maestra" en el sitio de Bangalore . Lo ves en tu clon.

Es posible que Bangalore remoto haya avanzado desde que usted hizo "buscar" o "tirar"

forvaidya avatar Aug 09 '2013 02:08 forvaidya

Dado 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.

Martin avatar Oct 17 '2017 10:10 Martin