español - git version actual
¿Por qué se muestra "origin/HEAD" cuando se ejecuta "git branch-r"? (7)
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. :)
Cuando ejecuta git branch -r
why the blazes, ¿indica el origin/HEAD
? Por ejemplo, hay un repositorio remoto en GitHub, por ejemplo, con dos ramas: master y awesome-feature. Si hago git clone
para tomarlo 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 negocio de HEAD
? ¿Es lo que push
a la última persona a push
su HEAD
cuando presionaron? ¿No será eso lo que sea que hayan push
? HEAD
mueve ... ¿Por qué me importa lo que alguien señaló en HEAD
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?
La razón por la cual un repositorio simple puede tener un HEAD, es porque determina qué rama se verifica inicialmente después de un clon del repositorio.
Normalmente, HEAD apunta a maestro, y esa es la rama que se desprotege cuando las personas clonan el repositorio. Al establecerlo en otra rama (editando HEAD en el repositorio desnudo), se da salida a dicha rama en clonar.
Si "origen" es un repositorio remoto, entonces origin / HEAD identifica la rama predeterminada en ese repositorio remoto.
Ejemplo:
$ git remote show
origin
$ git remote show origin
* remote origin
Fetch URL: [email protected]:walkerh/pipe-o-matic.git
Push URL: [email protected]: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 "HEAD branch: master". Aquí es donde el repositorio remoto les permite a los clientes saber qué rama se va a finalizar de forma predeterminada.
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.
Supongo que alguien empujó una rama y la llamó HEAD:
git push origin HEAD
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 que 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 ..."
@robinst es correcto.
En git, puede seleccionar qué rama está desprotegida por defecto (es decir, cuando clona). Por defecto, origin/HEAD
apuntará a eso.
En GitHub, puedes cambiar esto en la configuración de administración de tu repositorio de GitHub. También puedes hacerlo desde la línea de comandos a través de
git remote set-head origin trunk
o eliminarlo por completo a través de
git remote set-head origin -d
Example . Mire el menú desplegable ''Cambiar sucursales''. trunk
está marcado, por lo que origin/HEAD
sigue al trunk
.