¿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?
¿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?
Respuestas:
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 ejemplo git init
).
Puede eliminar la master
rama (por ejemplo git branch -D master
). No puede eliminar el HEAD
puntero.
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
git push origin
y empujará su rama B
"cambios a origin/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 :
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 paraorigin
se establece enmaster
, entoncesorigin
se puede especificar donde sea que normalmente se especifiqueorigin/master
.