Perbedaan antara KEPALA dan tuan

189

Apa perbedaan antara HEADdan masterdi Git?

Saya melakukan klon proyek di GitHub dan ingin mendorong perubahan saya ke remote. Tapi ke mana saya harus mendorong?

tangkapan layar

Frederik Heyninck
sumber

Jawaban:

162

masteradalah referensi ke ujung cabang. Secara konvensi (dan secara default) ini biasanya cabang integrasi utama, tetapi tidak harus demikian.

HEADsebenarnya adalah jenis referensi khusus yang menunjuk ke referensi lain. Mungkin menunjuk master atau mungkin tidak (itu akan menunjuk ke cabang mana saja yang saat ini sedang diperiksa). Jika Anda tahu Anda ingin melakukan ke mastercabang maka dorong ke sini.

Ini adalah contoh visual:

teks alternatif

Di repositori Anda sendiri, Anda dapat memeriksa ke mana arah HEADmenunjuk dengan menjalankan ini:

$ git symbolic-ref HEAD
refs/heads/master

Namun, mencari tahu ke mana remotes/origin/HEADarahnya lebih rumit karena berada di mesin jarak jauh.

Ada sedikit tutorial hebat tentang referensi git di sini:

http://people.gnome.org/~federico/news-2008-11.html#pushing-and-pulling-with-git-1

Lee Netherton
sumber
1
+1 Jawaban yang lebih tepat daripada milik saya. Lihat juga stackoverflow.com/questions/3301956/… dan stackoverflow.com/questions/3301956/… untuk ilustrasi seputar konsep-konsep tersebut.
VonC
37

Jawaban sederhananya adalah itu HEADadalah penunjuk / label untuk komit terbaru dari cabang tempat Anda saat ini. masteradalah cabang default yang dibuat ketika Anda menginisialisasi repositori git (mis git init.).

Anda dapat menghapus mastercabang (mis git branch -D master.). Anda tidak dapat menghapus HEADpointer.

benhorgen
sumber
6
" HEADadalah penunjuk / label untuk komit terbaru dari cabang tempat Anda saat ini." Saya pikir ini paling menyesatkan. Jika Anda checkout komit yang lebih lama, maka HEAD sekarang adalah pointer ke komit yang lebih lama, bukan komit yang terbaru. Baik?
LarsH
2
Anda benar. KEPALA adalah checkout terakhir Anda. Tetapi dalam pembelaan saya, bagi Git, checkoutperintahnya sama dengan mengganti cabang dalam sistem SCM umum lainnya.
benhorgen
1
Saya bersimpati ... Saya bisa dengan mudah melakukan kesalahan yang sama. Satu-satunya alasan yang saya perhatikan adalah karena saya pada tahap mencoba meneliti apa sebenarnya yang dimaksud KEPALA. Apakah Anda bisa mengedit jawaban Anda menjadi benar? Saya menemukan KEPALA menjadi konsep yang sulit untuk menemukan deskripsi akurat, untuk git non-ahli seperti saya. Dan memiliki saran yang duduk di sana di web yang memberikan informasi yang salah tentang KEPALA membuatnya sedikit lebih sulit.
LarsH
2
Saya pikir komentar Anda adalah klarifikasi fantastis bagi siapa pun yang mencari pemahaman yang lebih baik tentang apa HEADsebenarnya pointer Git . Saya menghargai komentar Anda dan berpikir orang lain juga akan. Konten posting asli saya bersama dengan komentar tindak lanjut Anda saling melengkapi. Terima kasih.
benhorgen
4
Teknisnya, tetapi jika Anda membatalkan komit yang lebih lama, Anda tidak lagi 'di' cabang. Jika Anda membatalkan komit alih-alih cabang, Anda memiliki apa yang disebut "KEPALA terlepas", Anda tidak lagi 'di cabang'. Menjadi 'di cabang' berarti KEPALA Anda merujuk cabang, dan menurut definisi Anda berada di komit terbaru dari cabang itu. Hanya karena Anda telah melakukan 'b54fe7', dan poin master pada komit itu, tidak berarti Anda berada di cabang master. Mungkin ada beberapa cabang yang menunjuk ke komit yang sama, Anda 'di' yang ditunjuk HEAD, jika ada.
Jason Goemaat
8

Cukup dorong perubahan cabang Anda saat ini

git push origin

dan itu akan mendorong cabang Anda ' B' berubah menjadi ' origin/B'.
Jika Anda berada di mastercabang Anda , git akan mendorong ke origin/master.
Sebenarnya itu akan mendorong semua perubahan pada cabang lokal yang memiliki cabang terpencil yang cocok di origin. Itu dikendalikan oleh pengaturan config push.default .
Lihat juga mendorong RefSpecs di buku Pro Git .


Apa yang Anda lihat adalah bilah samping yang mewakili semua refspec repo jarak jauh Anda di fork GitX eksperimental dari proyek GitX .

teks alternatif

The HEADakan menunjuk cabang default untuk jarak jauh itu.
Lihat git remote set-headhalaman manual :

Memiliki cabang default untuk kendali jarak jauh tidak diperlukan, tetapi memungkinkan nama kendali jarak jauh ditentukan sebagai pengganti cabang tertentu.
Misalnya, jika cabang default untuk origindiatur ke master, maka origindapat ditentukan di mana pun Anda biasanya menentukan origin/master.

VONC
sumber