¿Por qué se muestra "origin / HEAD" cuando se ejecuta "git branch -r"?

votos
131

Cuando corres, git branch -r¿por qué los incendios figuran en la lista origin/HEAD? Por ejemplo, hay un repositorio remoto en GitHub, por ejemplo, con dos ramas: master y awesome-feature. Si hago git clonepara agarrarlo y luego ir a mi nuevo directorio y enumerar las ramas, veo esto:

$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature

O en cualquier orden en que esté (alfa? Estoy falsificando este ejemplo para mantener en secreto la identidad de un repo inocente). Entonces, ¿cuál es el HEADnegocio? ¿Es lo que la última persona que pushtuvo su HEADpunta en cuando empujaron? ¿No será eso lo que sea que hayan sido push? HEADs moverse ... ¿por qué me importa lo que alguien HEADapuntó en otra máquina?

Solo estoy manejando el seguimiento remoto y tal, así que esta es una confusión persistente. ¡Gracias!

EDITAR: tenía la impresión de que los repos remotos dedicados (como GitHub, donde nadie se infiltraría y trabajaría en ese código, sino solo tirar o empujar, etc.) no tenían ni debían tener un HEAD porque, básicamente, sin copia de trabajo. ¿No tan?

Publicado el 09/12/2008 a las 22:36
fuente por usuario
En otros idiomas...                            


7 respuestas

votos
113

@robinst es correcta.

En git, puede seleccionar qué rama está desprotegido por defecto (es decir, cuando se clona). Por defecto, origin/HEADse apunte a eso.

En GitHub, Usted puede cambiar esto en la configuración de administrador para tu repositorio GitHub. También puede hacerlo desde la línea de comandos a través de

git remote set-head origin trunk

o eliminar por completo a través de

git remote set-head origin -d

Ejemplo . Mira desplegable las ramas 'switch'. trunkse comprueba, por lo que origin/HEADsigue trunk.

Respondida el 27/07/2011 a las 03:14
fuente por usuario

votos
50

La razón de un repositorio desnudo puede tener una cabeza, es que debido a que determina qué rama se comprueba inicialmente después de un clon del repositorio.

Normalmente, CABEZA apunta a dominar, y que es la rama que está desprotegido cuando la gente clonar el repositorio. Si se establece en otra rama (editando la cabeza en las desnudas repositorio) se traduce en esa rama está comprobando hacia fuera en el clon.

Respondida el 21/05/2010 a las 16:08
fuente por usuario

votos
22

Tenía la impresión de que los repos remotos dedicados (como GitHub, donde nadie se infiltraría y trabajaría en ese código, sino solo tirar o empujar, etc.) no tenían ni debían tener un HEAD porque, básicamente, no funcionaba dupdo. ¿No tan?

Tuve la misma impresión exacta como dijiste.

E incluso no puedo eliminar ese origen / HEAD rama de seguimiento remoto clonado de github haciendo

git branch -d -r origin/HEAD

Esto no tuvo efecto.

¿Puede alguien decirme cómo puedo eliminar esa rama de seguimiento remoto de origen / HEAD?

actualizar

Aunque no encontré por qué hay un origen / HEAD creado al clonar desde github, encuentro una forma de eliminarlo.

La nueva versión de git proporciona

git remote set-head <name> -d

para eliminar el puntero HEAD inútil de la rama de seguimiento remoto.

Y también podemos cambiar el nombre predeterminado tonto 'origen' a lo que queramos mediante el uso de

git remote rename origin <new_name>

Espero que esto pueda ayudar. :)

Respondida el 30/07/2009 a las 11:14
fuente por usuario

votos
13

Tiene razón en que presionar a los repos remotos dedicados funciona mucho mejor cuando están 'desnudos', es decir, cuando no tienen directorios de trabajo. La arquitectura de Git está diseñada para actualizarse mediante parches o pull( fetch), lo cual tiene sentido en un VCS distribuido. Como dicen los doctores en algún lugar, presionar una rama que está actualmente desprotegida puede dar como resultado "resultados inesperados" .

HEAD es parte de los requisitos para un repositorio válido. El diseño de Git Repository dice, en parte:

HEAD

A symref (see glossary) to the refs/heads/ namespace describing the currently active  
branch. It does not mean much if the repository is not associated with any working tree  
(i.e. a bare repository), but a valid git repository must have the HEAD file; some  
porcelains may use it to guess the designated "default" branch of the repository  
(usually master). It is legal if the named branch name does not (yet) exist.

Entonces verás HEAD como parte de la lista de sucursales, incluso si "no significa mucho ..."

Respondida el 10/12/2008 a las 19:27
fuente por usuario

votos
3

Si el "origen" es un repositorio remoto, a continuación, origen / HEAD identifica la rama predeterminada en ese repositorio remoto.

Ejemplo:

$ git remote show
origin
$ git remote show origin
* remote origin
  Fetch URL: git@github.com:walkerh/pipe-o-matic.git
  Push  URL: git@github.com:walkerh/pipe-o-matic.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

Tenga en cuenta la línea que dice "CABEZA rama: maestro". Aquí es donde el repositorio remoto permite a los clientes saben qué rama de pago y envío por defecto.

Respondida el 07/05/2012 a las 23:53
fuente por usuario

votos
2

Siempre hay un HEAD que apunta a la rama actualmente desprotegida en el repositorio remoto (que puede o no ser maestro). Incluso los repositorios remotos tienen sucursales actuales. Por lo general, es maestro, y fuera de mi cabeza no puedo pensar en ninguna razón por la que uno quiera cambiarlo, pero se puede cambiar.

Respondida el 10/12/2008 a las 01:43
fuente por usuario

votos
-8

Supongo que alguien empujó una rama y la llamó HEAD:

git push origin HEAD
Respondida el 10/12/2008 a las 00:30
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more