Acabo de descubrir y usar FETCH_HEAD
. Quería una copia local de algún software de un servidor y lo hice
git fetch gitserver release_1
gitserver
es el nombre de mi máquina que almacena repositorios git.
release_1
es una etiqueta para una versión del software. Para mi sorpresa, release_1
no se encontraba en ninguna parte de mi máquina local. Tuve que escribir
git tag release_1 FETCH_HEAD
para completar la copia de la cadena de confirmaciones etiquetada (release_1) desde el repositorio remoto al local. Fetch encontró la etiqueta remota, copió el commit en mi máquina local, no creó una etiqueta local, pero configuró FETCH_HEAD
el valor del commit para poder encontrarla y usarla. Luego solía FETCH_HEAD
crear una etiqueta local que coincidía con la etiqueta en el control remoto. Esa es una ilustración práctica de lo queFETCH_HEAD
es y cómo se puede usar, y podría ser útil para que alguien se pregunte por qué git fetch no hace lo que uno esperaría ingenuamente.
En mi opinión, es mejor evitarlo para ese propósito y una mejor manera de lograr lo que estaba tratando de hacer es
git fetch gitserver release_1:release_1
es decir, obtener release_1 y llamarlo release_1 localmente. (Es la fuente: dest, consulte https://git-scm.com/book/en/v2/Git-Internals-The-Refspec ; ¡en caso de que desee darle un nombre diferente!)
Sin FETCH_HEAD
embargo, es posible que desee usar a veces:
git fetch gitserver bugfix1234
git cherry-pick FETCH_HEAD
podría ser una buena manera de usar el número de corrección de errores 1234 de su servidor Git, y dejar la recolección de basura de Git para deshacerse de la copia del servidor una vez que la solución se ha seleccionado en su rama actual. (¡Supongo que hay una buena confirmación etiquetada limpia que contiene toda la corrección de errores en el servidor!)
git fetch origin master
realidad se actualizaráorigin/master
, no soloFETCH_HEAD
. Ver stackoverflow.com/a/20967347/6309