Saya baru saja menemukan dan menggunakan FETCH_HEAD. Saya ingin salinan lokal beberapa perangkat lunak dari server dan saya lakukan
git fetch gitserver release_1
gitserveradalah nama mesin saya yang menyimpan repositori git.
release_1adalah tag untuk versi perangkat lunak. Yang mengejutkan saya, release_1ternyata tidak ditemukan di mesin lokal saya. Saya harus mengetik
git tag release_1 FETCH_HEAD
untuk menyelesaikan salinan rantai komitmen yang ditandai (release_1) dari repositori jauh ke yang lokal. Fetch telah menemukan tag jarak jauh, menyalin komit ke mesin lokal saya, belum membuat tag lokal, tetapi telah menetapkan FETCH_HEADnilai komit, sehingga saya dapat menemukan dan menggunakannya. Saya kemudian digunakan FETCH_HEADuntuk membuat tag lokal yang cocok dengan tag pada remote. Itu adalah ilustrasi praktis tentang apa FETCH_HEADitu dan bagaimana itu dapat digunakan, dan mungkin berguna bagi orang lain yang bertanya-tanya mengapa git fetch tidak melakukan apa yang Anda harapkan secara naif.
Menurut pendapat saya sebaiknya dihindari untuk tujuan itu dan cara yang lebih baik untuk mencapai apa yang saya coba lakukan adalah
git fetch gitserver release_1:release_1
yaitu untuk mengambil release_1 dan menyebutnya release_1 secara lokal. (Ini adalah sumber: dest, lihat https://git-scm.com/book/en/v2/Git-Internals-The-Refspec ; kalau-kalau Anda ingin memberikan nama yang berbeda!)
Anda mungkin ingin menggunakan FETCH_HEADbeberapa kali: -
git fetch gitserver bugfix1234
git cherry-pick FETCH_HEAD
mungkin cara yang baik untuk menggunakan perbaikan bug nomor 1234 dari server Git Anda, dan meninggalkan pengumpulan sampah Git untuk membuang salinan dari server setelah perbaikannya telah dipilih ke cabang Anda saat ini. (Saya berasumsi bahwa ada komit tag yang bagus dan bersih yang berisi seluruh perbaikan bug di server!)
git fetch origin mastersebenarnya akan diperbaruiorigin/master, bukan hanyaFETCH_HEAD. Lihat stackoverflow.com/a/20967347/6309