2010-12-08 21 views

Respuesta

6

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.

alt text

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 para origin se establece en master, entonces origin se puede especificar cualquier lugar que normalmente se especifique origin/master.

120

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 mastero 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:

alt text

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

+1

+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

25

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.

+2

"' 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

+1

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

+0

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

Cuestiones relacionadas