En Git, ¿cuál es la diferencia entre origen/maestro y origen maestro?
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 ?
( 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 main
son dos cosas separadas y origin/main
es una cosa. Tres cosas en total.
Dos ramas:
main
es una sucursal localorigin/main
es una rama de seguimiento remoto (que es una copia local de la rama denominada "principal" en la rama remota denominada "origen")
Un control remoto:
origin
es un control remoto
¿El origen/principal es remoto?
¡ La origin/main
sucursal es local! Cada vez que lo recojas origin
, origin/main
se actualizará. Sin embargo, origin/main
puede estar desactualizado e incluso es posible que main
ya no exista origin
. Puede usar la --prune
opción ( -p
) con git fetch
para eliminar automáticamente las ramas de seguimiento remoto si se elimina la rama que rastrean.
La origin/main
rama no es una referencia ni un puntero a la main
rama en origin
. Es una copia local.
Ejemplo: tirar en dos pasos
Como origin/main
es una rama, puedes fusionarla. Aquí hay un extracto en dos pasos:
Paso uno, buscar main
desde el control remoto origin
. Se recuperará la main
rama y se nombrará la copia local .origin
origin/main
git fetch origin main
Luego te fusionas origin/main
con main
.
git merge origin/main
Luego puede enviar sus nuevos cambios main
nuevamente 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 main
si 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 main
y la copia local es origin/main
. ¡Esto está totalmente bien! Puede resultar un poco confuso, pero tal vez ya tenga una rama diferente llamada main
y necesite cambiar a una rama diferente para trabajar en un cambio diferente.
origin/master
es una entidad (ya que no es una sucursal física) que representa el estado de la master
sucursal en el control remoto origin
.
origin master
es la rama master
en 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
origin/master
es la master
sucursal remota
Por lo general, después de hacer a git fetch origin
para traer todos los cambios del servidor, harías a git rebase origin/master
para cambiar la base de tus cambios y mover la rama al índice más reciente. Aquí, origin/master
nos referimos a la rama remota, porque básicamente le estás diciendo a GIT que cambie la base de la origin/master
rama a la rama actual.
Lo usarías origin master
al empujar, por ejemplo. git push origin master
es simplemente decirle a GIT que envíe la sucursal local al repositorio remoto master
.
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"
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 master
sucursal en origin
.