Cuando corres, git branch -r¿por qué las llamas enumera origin/HEAD? Por ejemplo, hay un repositorio remoto en GitHub, por ejemplo, con dos ramas: maestra e impresionante función. Si lo 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 el orden en que estaría (¿alfa? Estoy fingiendo este ejemplo para mantener en secreto la identidad de un repositorio inocente). Entonces, ¿cuál es el HEADnegocio? ¿Es lo que la última persona que pushtuvo su HEADpunta en cuando empujaron? ¿No será eso siempre lo que sea que hayan pusheditado? HEADs moverse ... ¿por qué me importa lo que alguien haya HEADseñalado en otra máquina?
Solo estoy entendiendo el seguimiento remoto y tal, así que esta es una confusión persistente. ¡Gracias!
EDITAR: tenía la impresión de que los repositorios remotos dedicados (como GitHub, donde nadie ingresará y trabajará en ese código, pero solo tirar o empujar, etc.) no tenían y no deberían tener un HEAD porque, básicamente, había Sin copia de trabajo. ¿No tan?
fuente

Respuestas:
@robinst es correcto.
En git, puede seleccionar qué rama está desprotegida de forma predeterminada (es decir, cuando clona). Por defecto,
origin/HEADapuntará a eso.En GitHub, puede cambiar esto en la configuración de administrador para su repositorio de GitHub. También puede hacerlo desde la línea de comandos a través de
o eliminarlo por completo a través de
Ejemplo . Mire el menú desplegable 'Cambiar ramas'.
trunkestá marcado, asíorigin/HEADsiguetrunk.fuente
originy mi meotherremote/HEAD -> masterestaba molestando. Ejecutar su comando me lo arregló.La razón por la que un repositorio simple puede tener un HEAD es porque determina qué rama se extrae inicialmente después de un clon del repositorio.
Normalmente, HEAD apunta a master, y esa es la rama que se extrae cuando las personas clonan el repositorio. Si lo configura en otra rama (editando HEAD en el repositorio simple), la rama se desprotege en el clon.
fuente
origin/HEADes correcta una referencia local? ¿Eliminarlo tiene algún efectoorigin?origin/masterno afecta el control remoto.Tuve exactamente la misma impresión que dijiste.
E incluso no puedo eliminar esa rama de seguimiento remoto de origen / HEAD clonada de github haciendo
Esto no tuvo efecto.
¿Alguien puede decirme cómo puedo eliminar esa rama de seguimiento remoto de origen / HEAD?
actualizar
Aunque no encontré por qué se crea un origen / CABEZA cuando se clona desde github, encuentro una forma de eliminarlo.
La nueva versión de git proporciona
para eliminar el puntero HEAD inútil de la rama de seguimiento remoto.
Y también podemos cambiar el tonto nombre predeterminado 'origen' a lo que queramos usando
Espero que esto pueda ayudar. :)
fuente
git remote set-head origin -dTienes razón en que empujar a repositorios 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 que tiene sentido en un VCS distribuido. Como dicen los documentos en alguna parte, empujar a una rama que está actualmente desprotegida puede dar lugar a "resultados inesperados" .El HEAD es parte de los requisitos para un repositorio válido. El diseño del repositorio de Git dice, en parte:
Entonces verá HEAD como parte de la lista de sucursales, incluso si "no significa mucho ..."
fuente
mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config --global user.email "[email protected]"; git config --global user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.baresalidas verdaderas. Además, no hay una copia de trabajo del archivo insertado en el repositorio foobar con esos comandos.mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config user.email "[email protected]"; git config user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.baresalidas verdaderas. Además, no hay una copia de trabajo del archivo insertado en el repositorio foobar con esos comandos.Si "origin" es un repositorio remoto, origin / HEAD identifica la rama predeterminada en ese repositorio remoto.
Ejemplo:
Tenga en cuenta la línea que dice "HEAD branch: master". Aquí es donde el repositorio remoto les permite a los clientes saber qué sucursal pagar de manera predeterminada.
fuente
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 no puedo pensar en ninguna razón por la que uno quiera cambiarlo, pero se puede cambiar.
fuente
Supongo que alguien empujó una rama y la llamó HEAD:
fuente