¿Cuál es la diferencia entre HEADy masteren Git?
Hice un clon de un proyecto en GitHub y quiero enviar mis cambios al control remoto. ¿Pero a cuál debo empujar?

masteres 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í.
HEADen 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 masterrama, presione para esto.
Aquí hay un ejemplo visual:

En su propio repositorio puede verificar hacia dónde HEADapunta apuntando esto:
$ git symbolic-ref HEAD
refs/heads/master
Sin embargo, descubrir hacia dónde remotes/origin/HEADapunta 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
HEADes un puntero / etiqueta a la confirmación más reciente de la rama en la que se encuentra actualmente.masteres la rama predeterminada creada cuando inicializa un repositorio git (por ejemplogit init).Puede eliminar la
masterrama (por ejemplogit branch -D master). No puede eliminar elHEADpuntero.fuente
HEADes 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?checkoutcomando es el equivalente a cambiar ramas en otros sistemas SCM comunes.HEADrealmente 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
masterrama, 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
HEADdesignará la rama predeterminada para ese control remoto.Ver
git remote set-headpágina del manual :fuente