¿Cuál es la diferencia entre HEAD
y master
en Git?
Hice un clon de un proyecto en GitHub y quiero enviar mis cambios al control remoto. ¿Pero a cuál debo empujar?
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
en realidad es un tipo especial de referencia que apunta a otra referencia. Puede apuntar master
o no (apuntará a la rama que esté actualmente desprotegida). Si sabe que quiere comprometerse con la master
rama, presione para esto.
Aquí hay un ejemplo visual:
En su propio repositorio puede verificar hacia dónde HEAD
apunta apuntando esto:
$ git symbolic-ref HEAD
refs/heads/master
Sin embargo, descubrir hacia dónde remotes/origin/HEAD
apunta es más complicado porque está en la máquina remota.
Aquí hay un pequeño gran tutorial sobre referencias de git:
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 a la confirmación más reciente de la rama en la que se encuentra actualmente.master
es la rama predeterminada creada cuando inicializa un repositorio git (por ejemplogit init
).Puede eliminar la
master
rama (por ejemplogit branch -D master
). No puede eliminar elHEAD
puntero.fuente
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 comprueba una confirmación anterior, HEAD ahora es un puntero a esa confirmación anterior, no a la confirmación más reciente. ¿Correcto?checkout
comando es el equivalente a cambiar ramas en otros sistemas SCM comunes.HEAD
realmente es el puntero Git . Agradezco tu comentario y creo que otros también lo harán. El contenido de mi publicación original junto con su comentario de seguimiento se complementan entre sí. Gracias.Simplemente presione los cambios de su sucursal actual
y empujará su rama
B
"cambios aorigin/B
".Si estás en tu
master
rama, git lo presionaráorigin/master
.En realidad, empujará todos los cambios en las ramas locales que tienen ramas remotas coincidentes en
origin
. Está controlado por la configuración config push.default .Vea también empujar RefSpecs en el libro Pro Git .
Lo que está viendo es la barra lateral que representa todas las especificaciones de su repositorio remoto en la bifurcación Experimental GitX del proyecto GitX .
El
HEAD
designará la rama predeterminada para ese control remoto.Ver
git remote set-head
página del manual :fuente