Ho appena scoperto e usato FETCH_HEAD. Volevo una copia locale di alcuni software da un server e l'ho fatto
git fetch gitserver release_1
gitserverè il nome della mia macchina che memorizza i repository git.
release_1è un tag per una versione del software. Con mia sorpresa, non è release_1stato possibile trovare da nessuna parte sulla mia macchina locale. Ho dovuto scrivere
git tag release_1 FETCH_HEAD
per completare la copia della catena di commit contrassegnata (release_1) dal repository remoto a quello locale. Fetch aveva trovato il tag remoto, copiato il commit sul mio computer locale, non aveva creato un tag locale, ma aveva impostato FETCH_HEADil valore del commit, in modo che potessi trovarlo e usarlo. Ho quindi usato FETCH_HEADper creare un tag locale che corrispondeva al tag sul telecomando. Questa è una illustrazione pratica di ciò che FETCH_HEADè e come può essere usato, e potrebbe essere utile a qualcun altro che si chiede perché Git Fetch non faccia ciò che ci si aspetterebbe ingenuamente.
A mio avviso, è meglio evitarlo a tale scopo e un modo migliore per raggiungere quello che stavo cercando di fare è
git fetch gitserver release_1:release_1
cioè per scaricare release_1 e chiamarla release_1 localmente. (È fonte: dest, vedi https://git-scm.com/book/en/v2/Git-Internals-The-Refspec ; nel caso in cui desideri dargli un nome diverso!)
A volte potresti voler usare FETCH_HEAD: -
git fetch gitserver bugfix1234
git cherry-pick FETCH_HEAD
potrebbe essere un buon modo di usare la correzione bug numero 1234 dal tuo server Git e di lasciare la garbage collection di Git per smaltire la copia dal server una volta che la correzione è stata selezionata sul tuo ramo corrente. (Suppongo che ci sia un bel commit con tag pulito che contiene l'intera correzione del bug sul server!)
git fetch origin masterverrà effettivamente aggiornatoorigin/master, non soloFETCH_HEAD. Vedere stackoverflow.com/a/20967347/6309