Perhatikan dulu bahwa pertanyaan Anda menunjukkan sedikit kesalahpahaman. origin / HEAD mewakili cabang default pada remote , yaitu HEAD yang ada di repositori jauh yang Anda panggil asal. Saat Anda mengganti cabang di repo Anda, Anda tidak memengaruhi itu. Hal yang sama berlaku untuk cabang yang jauh; Anda mungkin memiliki masterdan origin/masterdalam repo Anda, di mana origin/mastermerupakan salinan lokal mastercabang di repositori jarak jauh.
KEPALA asal hanya akan berubah jika Anda atau orang lain benar-benar mengubahnya di repositori jarak jauh , yang pada dasarnya seharusnya tidak pernah terjadi - Anda ingin cabang default repo publik tetap konstan, pada cabang stabil (mungkin master). origin / HEAD adalah ref lokal yang mewakili salinan HEAD lokal dalam repositori jarak jauh. (Nama lengkapnya adalah ref / remote / origin / HEAD.)
Saya pikir jawaban di atas menjawab apa yang sebenarnya ingin Anda ketahui, tetapi untuk terus maju dan menjawab pertanyaan yang Anda tanyakan secara eksplisit ... asal / KEPALA diatur secara otomatis ketika Anda mengkloning repositori, dan hanya itu. Anehnya, itu tidak diatur oleh perintah seperti git remote update- Saya percaya satu-satunya cara itu akan berubah adalah jika Anda mengubahnya secara manual. (Dengan perubahan yang saya maksud arahkan ke cabang yang berbeda; jelas komit itu menunjuk ke perubahan jika cabang itu berubah, yang mungkin terjadi saat mengambil / menarik / memperbarui jarak jauh.)
Sunting : Masalah yang dibahas di bawah ini diperbaiki di Git 1.8.4.3 ; lihat pembaruan ini .
Ada peringatan kecil. KEPALA adalah ref simbolik, menunjuk ke cabang bukannya langsung ke komit, tetapi protokol transfer jarak jauh git hanya melaporkan komit untuk ref. Jadi Git tahu SHA1 dari commit yang ditunjuk oleh HEAD dan semua referensi lainnya; kemudian harus menyimpulkan nilai KEPALA dengan menemukan cabang yang menunjuk ke komit yang sama. Ini berarti bahwa jika dua cabang kebetulan menunjuk ke sana, itu ambigu. (Saya percaya itu mengambil master jika memungkinkan, kemudian kembali ke alfabet pertama.) Anda akan melihat ini dilaporkan dalam output dari git remote show origin:
$ git remote show origin
* remote origin
Fetch URL: ...
Push URL: ...
HEAD branch (remote HEAD is ambiguous, may be one of the following):
foo
master
Anehnya, walaupun gagasan HEAD yang dicetak dengan cara ini akan berubah jika segalanya berubah pada remote (mis. Jika foo dihapus), itu sebenarnya tidak memperbarui refs/remotes/origin/HEAD. Ini dapat menyebabkan situasi yang sangat aneh. Katakan bahwa dalam contoh di atas asal / KEPALA sebenarnya menunjuk ke foo, dan cabang foo asal itu kemudian dihapus. Kami kemudian dapat melakukan ini:
$ git remote show origin
...
HEAD branch: master
$ git symbolic-ref refs/remotes/origin/HEAD
refs/remotes/origin/foo
$ git remote update --prune origin
Fetching origin
x [deleted] (none) -> origin/foo
(refs/remotes/origin/HEAD has become dangling)
Jadi meskipun remote show tahu HEAD adalah master, ia tidak memperbarui apa pun. Cabang basi foo dipangkas dengan benar, dan KEPALA menjadi menggantung (menunjuk ke cabang tidak ada), dan itu masih tidak memperbaruinya untuk menunjuk ke master. Jika Anda ingin memperbaiki ini, gunakan git remote set-head origin -a, yang secara otomatis menentukan HEAD asal seperti di atas, dan kemudian benar-benar menetapkan asal / HEAD untuk menunjuk ke cabang jarak jauh yang sesuai.
refs/origin/HEAD. Ini bukan tentang bagaimana referensi simbolis repositori sendiriHEADakan ditetapkan.