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 clone
para 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 HEAD
negocio? ¿Es lo que la última persona que push
tuvo su HEAD
punta en cuando empujaron? ¿No será eso siempre lo que sea que hayan push
editado? HEAD
s moverse ... ¿por qué me importa lo que alguien haya HEAD
señ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/HEAD
apuntará 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'.
trunk
está marcado, asíorigin/HEAD
siguetrunk
.fuente
origin
y mi meotherremote/HEAD -> master
estaba 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/HEAD
es correcta una referencia local? ¿Eliminarlo tiene algún efectoorigin
?origin/master
no 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 -d
Tienes 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.bare
salidas 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.bare
salidas 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