¿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?

¿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?

Respuestas:
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 ejemplo git init).
Puede eliminar la masterrama (por ejemplo git branch -D master). No puede eliminar el HEADpuntero.
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
git push origin
y empujará su rama B"cambios a origin/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 :
No es necesario tener una rama predeterminada para un control remoto, pero permite que se especifique el nombre del control remoto en lugar de una rama específica.
Por ejemplo, si la rama predeterminada paraoriginse establece enmaster, entoncesoriginse puede especificar donde sea que normalmente se especifiqueorigin/master.