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_1
stato 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_HEAD
il valore del commit, in modo che potessi trovarlo e usarlo. Ho quindi usato FETCH_HEAD
per 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 master
verrà effettivamente aggiornatoorigin/master
, non soloFETCH_HEAD
. Vedere stackoverflow.com/a/20967347/6309