Je viens de découvrir et d'utiliser FETCH_HEAD
. Je voulais une copie locale d'un logiciel à partir d'un serveur et je l'ai fait
git fetch gitserver release_1
gitserver
est le nom de ma machine qui stocke les dépôts git.
release_1
est une balise pour une version du logiciel. À ma grande surprise, release_1
était alors introuvable sur ma machine locale. Je devais taper
git tag release_1 FETCH_HEAD
pour terminer la copie de la chaîne de validations balisée (release_1) du référentiel distant vers le local. Fetch avait trouvé la balise distante, copié la validation sur ma machine locale, n'avait pas créé de balise locale, mais avait défini FETCH_HEAD
la valeur de la validation, afin que je puisse la trouver et l'utiliser. J'ai ensuite utilisé FETCH_HEAD
pour créer une balise locale qui correspondait à la balise sur la télécommande. C'est une illustration pratique de ce qui FETCH_HEAD
est et comment il peut être utilisé, et pourrait être utile à quelqu'un d'autre se demandant pourquoi git fetch ne fait pas ce que vous attendez naïvement.
À mon avis, il vaut mieux éviter à cette fin et une meilleure façon de réaliser ce que j'essayais de faire est
git fetch gitserver release_1:release_1
c'est-à-dire pour récupérer la version_1 et l'appeler localement_1. (C'est la source: dest, voir https://git-scm.com/book/en/v2/Git-Internals-The-Refspec ; juste au cas où vous voudriez lui donner un nom différent!)
Vous voudrez peut-être utiliser FETCH_HEAD
parfois: -
git fetch gitserver bugfix1234
git cherry-pick FETCH_HEAD
pourrait être un bon moyen d'utiliser le correctif de bogue numéro 1234 de votre serveur Git, et de laisser la collecte de déchets de Git pour éliminer la copie du serveur une fois que le correctif a été sélectionné dans votre branche actuelle. (Je suppose qu'il y a un bon commit tagué propre contenant l'intégralité du correctif de bogue sur le serveur!)
git fetch origin master
sera mis à jourorigin/master
, pas seulementFETCH_HEAD
. Voir stackoverflow.com/a/20967347/6309