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
gitserver
adalah nama mesin saya yang menyimpan repositori git.
release_1
adalah tag untuk versi perangkat lunak. Yang mengejutkan saya, release_1
ternyata 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_HEAD
nilai komit, sehingga saya dapat menemukan dan menggunakannya. Saya kemudian digunakan FETCH_HEAD
untuk membuat tag lokal yang cocok dengan tag pada remote. Itu adalah ilustrasi praktis tentang apa FETCH_HEAD
itu 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_HEAD
beberapa 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 master
sebenarnya akan diperbaruiorigin/master
, bukan hanyaFETCH_HEAD
. Lihat stackoverflow.com/a/20967347/6309