¿Cuál es la diferencia entre HEAD
y master
en Git?Diferencia entre HEAD y master
Hice un clon de un proyecto en GitHub y deseo enviar mis cambios al control remoto. ¿Pero a cuál debería presionar?
¿Cuál es la diferencia entre HEAD
y master
en Git?Diferencia entre HEAD y master
Hice un clon de un proyecto en GitHub y deseo enviar mis cambios al control remoto. ¿Pero a cuál debería presionar?
empujar simplemente los cambios de su rama actual
git push origin
y va a empujar los cambios de su rama 'B
' a 'origin/B
'.
Si está en su rama master
, git presionará origin/master
.
En realidad, impulsará todos los cambios en las sucursales locales que tienen ramas remotas coincidentes en origin
. Se controla mediante la configuración push.default.
Véase también pushing RefSpecs in the Pro Git book.
Lo que está viendo es la barra lateral que representa a todos los refspecs de tu repositorio remoto en el Experimental GitX fork del GitX project.
El HEAD
designará la rama por defecto para ese remoto.
Ver git remote set-head
man page:
Tener una rama por defecto para una distancia no es necesaria, pero permite que el nombre de la distancia que se especifique en lugar de una rama específica.
Por ejemplo, si la rama predeterminada paraorigin
se establece enmaster
, entoncesorigin
se puede especificar cualquier lugar que normalmente se especifiqueorigin/master
.
master
es una referencia al final de una rama. Por convención (y por defecto) esta suele ser la rama de integración principal, pero no tiene que ser así.
HEAD
es en realidad un tipo especial de referencia que apunta a otra referencia. Puede apuntar a master
o no puede (apuntará a la rama que esté actualmente desprotegida). Si sabe que desea comprometerse con la rama master
, presione para esto.
Aquí está un ejemplo visual:
En su propio repositorio se puede comprobar que el HEAD
está señalando ejecutando esto:
$ git symbolic-ref HEAD
refs/heads/master
Sin embargo, encontrar el origen del remotes/origin/HEAD
señala que es más complicado porque está en la máquina remota.
Hay un gran pequeño tutorial sobre referencias git aquí:
http://people.gnome.org/~federico/news-2008-11.html#pushing-and-pulling-with-git-1
La respuesta simple es que HEAD
es un puntero/etiqueta al más reciente comprometerse de la rama que se encuentra actualmente. master
es la rama predeterminada creada cuando inicializó un repositorio de git (por ejemplo, git init
).
Puede eliminar la rama master
(por ejemplo, git branch -D master
). No puede eliminar el puntero HEAD
.
"' HEAD' es un puntero/etiqueta a la confirmación más reciente de la rama en la que se encuentra actualmente. " Creo que esto es engañoso en el mejor de los casos. Si selecciona una confirmación más antigua, HEAD ahora es un puntero a esa confirmación anterior, no a la confirmación más reciente. ¿Derecha? – LarsH
Estás en lo correcto. HEAD es su último pago. Pero en mi defensa, para Git, el comando 'checkout' es equivalente a cambiar ramas en otros sistemas SCM comunes. – benhorgen
Me compadezco ... Fácilmente podría haber cometido el mismo error. La única razón por la que noté fue porque estoy en la etapa de tratar de investigar qué significa realmente HEAD. ¿Alguna posibilidad de que puedas editar tu respuesta para que sea correcta? Encuentro que HEAD es un concepto difícil de encontrar descripciones precisas de, para git no expertos como yo. Y tener un consejo sentado en la web que brinde información * incorrecta * sobre HEAD hace que sea un poco más difícil. – LarsH
+1 Respuesta más precisa que la mía. Ver también http://stackoverflow.com/questions/3301956/git-correct-way-to-change-active-branch-in-a-bare-repository/3302018#3302018 y http://stackoverflow.com/questions/ 3301956/git-correct-way-to-change-active-branch-in-a-bare-repository para ilustraciones alrededor de esos conceptos. – VonC