Pertanyaan Apa itu HEAD di Git?


Anda melihat dokumentasi Git mengatakan hal-hal seperti

Cabang harus sepenuhnya bergabung di HEAD.

Tapi apa itu Git HEAD persis?


835
2018-02-20 22:58


asal


Jawaban:


Anda dapat menganggap HEAD sebagai "cabang saat ini". Ketika Anda bertukar cabang dengan git checkout, revisi HEAD berubah untuk menunjuk ke ujung cabang baru.

Anda dapat melihat apa yang dilakukan HEAD dengan melakukan:

cat .git/HEAD

Dalam kasus saya, hasilnya adalah:

$ cat .git/HEAD
ref: refs/heads/master

Mungkin bagi HEAD untuk merujuk ke revisi tertentu yang tidak terkait dengan nama cabang. Situasi ini disebut a KEPALA yang terpisah.


618
2018-02-20 23:00



Kutipan orang lain:

Kepala hanyalah referensi ke a   melakukan objek. Setiap kepala memiliki nama   (nama cabang atau nama tag, dll). Oleh   default, ada kepala di setiap   repositori yang disebut master. Sebuah repositori   dapat berisi sejumlah kepala. Di   waktu tertentu, satu kepala dipilih   sebagai "kepala saat ini." Kepala ini   alias ke HEAD, selalu di ibukota ".

Perhatikan perbedaan ini: "kepala"   (huruf kecil) mengacu pada salah satu dari   kepala yang bernama di repositori; "KEPALA"   (huruf besar) mengacu secara eksklusif pada   kepala yang saat ini aktif. Ini   perbedaan sering digunakan di Git   dokumentasi.

Sumber lain yang baik yang dengan cepat mencakup kerja batin git (dan karenanya pemahaman yang lebih baik tentang kepala / HEAD) dapat ditemukan sini. Referensi (ref :) atau kepala atau cabang dapat dianggap seperti post-it notes menempel pada commit dalam sejarah komit. Biasanya mereka menunjuk ke ujung rangkaian komit, tetapi mereka dapat dipindahkan bersama git checkout atau git revert dll.


143
2017-12-07 21:03



Saya merekomendasikan definisi ini dari pengembang github Scott Chacon [referensi video]:

Kepala adalah cabang Anda saat ini. Ini adalah referensi simbolis. Ini adalah referensi ke cabang. Anda selalu memiliki KEPALA, tetapi KEPALA akan menunjuk ke salah satu dari petunjuk ini, ke salah satu cabang yang Anda ikuti. Ini adalah induk dari komitmen Anda berikutnya. Ini adalah apa yang seharusnya terakhir diperiksa ke direktori kerja Anda ... Ini adalah keadaan terakhir yang diketahui dari direktori kerja Anda.

Seluruh video akan memberikan pengenalan yang adil ke seluruh sistem git jadi saya juga menyarankan Anda untuk menonton semuanya jika punya waktu untuk.


44
2017-08-26 15:01



HEAD hanyalah penunjuk khusus yang menunjuk ke cabang lokal yang Anda ikuti saat ini.

Dari Pro Git Bab buku 3.1 Git Branching - Cabang Singkatnya, di bagian Membuat Cabang Baru:

Apa yang terjadi jika Anda membuat cabang baru? Nah, melakukannya menciptakan yang baru   penunjuk bagi Anda untuk bergerak. Katakanlah Anda membuat cabang baru   disebut pengujian. Anda melakukan ini dengan perintah git branch:

$ git branch testing 

Ini menciptakan penunjuk baru pada komitmen yang sama dengan Anda saat ini

enter image description here

Bagaimana Git tahu cabang apa yang Anda gunakan saat ini? Ini membuat pointer khusus yang disebut HEAD. Perhatikan bahwa ini jauh berbeda dari   konsep HEAD di VCS lain yang mungkin Anda gunakan, seperti   Subversion atau CVS. Di Git, ini adalah penunjuk ke cabang lokal   Anda saat ini aktif. Dalam hal ini, Anda masih di master. The git   perintah cabang hanya membuat cabang baru - itu tidak beralih ke itu   cabang.

enter image description here


35
2018-03-09 20:02



Dengan asumsi itu bukan kasus khusus yang disebut "terpisah HEAD", maka, sebagaimana tercantum dalam buku O'Reilly Git, edtion ke-2, hal.69, HEAD cara:

HEAD selalu mengacu pada komitmen terbaru pada arus   cabang. Ketika Anda mengubah cabang, HEAD diperbarui untuk merujuk ke yang baru   komitmen terbaru dari cabang.

begitu

HEAD aku s "tip" dari cabang saat ini.

Perhatikan bahwa kita dapat menggunakan HEAD untuk merujuk pada komitmen dan penggunaan terbaru HEAD~ sebagai komit sebelum tip, dan HEAD~~ atau HEAD~2 sebagai komit bahkan lebih awal, dan sebagainya.


26
2018-05-06 09:37



HEAD mengacu pada commit saat ini yang ditunjukkan oleh copy pekerjaan Anda, yaitu komit yang saat ini Anda periksa. Dari Dokumentasi kernel Linux resmi untuk menentukan revisi Git:

HEAD beri nama komit di mana Anda mendasarkan perubahan pada pohon kerja.

Perhatikan, bagaimanapun, bahwa dalam versi 1.8.4 Git yang akan datang, @ juga bisa digunakan sebagai singkatan untuk HEAD, sebagai dicatat oleh kontributor Git Junio ​​C Hamano di blog Git Blame-nya:

Daripada mengetik "HEAD", Anda dapat mengatakan "@" sebagai gantinya, mis. "git log @".

Pengguna Stack Overflow VonC juga menemukan beberapa informasi menarik tentang mengapa @ dipilih sebagai singkatan dalam jawabannya untuk pertanyaan lain.

Juga menarik, di beberapa lingkungan itu tidak perlu untuk bermodalkan HEAD, khususnya dalam sistem operasi yang menggunakan sistem file case-insensitive, khususnya Windows dan OS X.


17
2017-07-26 01:18



Melihat Membuat dan bermain dengan cabang

HEAD sebenarnya adalah file yang isinya menentukan di mana variabel HEAD merujuk:

$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
35ede5c916f88d8ba5a9dd6afd69fcaf773f70ed

Dalam repositori ini, isi file HEAD mengacu pada nama file kedua refs / heads / master. Berkas refs / heads / master berisi hash dari komitmen terakhir pada cabang master.

Hasilnya adalah HEAD points ke master branch commit dari .git / refs / heads / master mengajukan.

enter image description here


12
2017-12-09 07:20



Saya hanya ingin merinci beberapa hal dalam jawaban Greg Hewgil yang diterima. Menurut Git Panduan Saku

Cabang:

cabang itu sendiri didefinisikan sebagai semua titik yang dapat dijangkau dalam komit   grafik dari commit bernama ("ujung" dari cabang).

KEPALA: Jenis khusus dari Ref

HEAD ref khusus menentukan cabang apa yang Anda ...

Referensi

Git mendefinisikan dua jenis referensi, atau pointer bernama, yang disebutnya   "Ref":

  • Ref sederhana, yang menunjuk langsung ke ID objek (biasanya komit atau tag)
  • Referensi simbolis (atau symref), yang menunjuk pada referensi lain (sederhana atau simbolik)

Seperti yang disebutkan Greg, HEAD dapat berada dalam "keadaan terpisah". Jadi HEAD dapat berupa ref sederhana (untuk HEAD terpisah) atau symref.

jika HEAD adalah ref simbolik untuk cabang yang ada, maka Anda “aktif”   cabang itu. Jika, di sisi lain, HEAD adalah ref sederhana langsung   penamaan komit oleh ID SHA-1 nya, maka Anda tidak "di" cabang apa pun, tetapi   bukan dalam mode "terpisah KEPALA", yang terjadi ketika Anda memeriksa beberapa   sebelumnya berkomitmen untuk memeriksa.


8
2017-08-05 16:04



Saya pikir 'HEAD' adalah komit check out saat ini. Dengan kata lain 'HEAD' menunjukkan komitmen yang saat ini diperiksa.

Jika Anda baru saja melakukan kloning dan tidak memeriksanya, saya tidak tahu apa maksudnya, mungkin beberapa lokasi yang tidak valid.


4
2017-07-18 09:57