Dapatkah seseorang memberi tahu saya perbedaan antara KEPALA, pohon kerja dan indeks, di Git?
Dari apa yang saya mengerti, mereka semua adalah nama untuk cabang yang berbeda. Apakah asumsi saya benar?
Edit
aku menemukan ini
Repositori git tunggal dapat melacak sejumlah cabang yang berubah-ubah, tetapi pohon kerja Anda hanya dikaitkan dengan salah satu dari mereka (cabang "saat ini" atau "diperiksa"), dan HEAD menunjuk ke cabang itu.
Apakah ini berarti bahwa KEPALA dan pohon yang bekerja selalu sama?
git
version-control
Joyce Babu
sumber
sumber
HEAD
adalah komit di ujung cabang saat ini. Jika Anda baru saja memeriksa cabang, yaitu tidak memiliki file yang dimodifikasi, maka kontennya cocok dengan pohon kerja. Segera setelah Anda memodifikasi apa pun, itu tidak lagi cocok.Staging Area
ke daftar itu. ApaHEAD
,Working Tree
,Index
danStaging Area
Jawaban:
Beberapa referensi bagus tentang topik-topik itu:
(catatan: seperti dikomentari oleh Timo Huovinen , panah-panah itu tidak sesuai dengan komit, itu adalah urutan alur kerja , pada dasarnya menunjukkan panah sebagai di
1 -> 2 -> 3 -> 4
mana1
komit pertama dan4
yang terakhir)sumber
Perbedaan antara KEPALA (cabang saat ini atau keadaan terakhir yang dilakukan di cabang saat ini), indeks (alias. Area pentahapan) dan pohon kerja (keadaan file dalam checkout) dijelaskan di bagian "Tiga Negara" pada "Dasar-Dasar 1,3 Git " bab buku Pro Git oleh Scott Chacon (berlisensi Creative Commons).
Berikut gambar yang menggambarkannya dari bab ini:
Pada gambar di atas "direktori kerja" sama dengan "pohon kerja", "area pementasan" adalah nama alternatif untuk git "indeks", dan HEAD menunjuk ke cabang yang saat ini diperiksa, yang ujungnya menunjuk komit terakhir di " direktori git (repositori) "
Perhatikan bahwa
git commit -a
akan melakukan perubahan dan komit dalam satu langkah.sumber
working tree
tampaknya lebih disukai untukworking directory
saat ini. Lihat github.com/git/git/commit/…Pohon kerja Anda adalah apa yang sebenarnya ada di file yang sedang Anda kerjakan.
HEAD
adalah pointer ke cabang atau komit yang terakhir Anda periksa, dan yang akan menjadi induk dari komit baru jika Anda membuatnya. Misalnya, jika Anda berada dimaster
cabang, makaHEAD
akan menunjuk kemaster
, dan ketika Anda komit, komit baru itu akan menjadi turunan dari revisi yangmaster
menunjuk, danmaster
akan diperbarui untuk menunjuk ke komit baru.The Indeks adalah area pementasan di mana baru komit siap. Pada dasarnya, isi indeks adalah apa yang akan masuk ke dalam komit baru (meskipun jika Anda melakukannya
git commit -a
, ini akan secara otomatis menambahkan semua perubahan ke file yang Git tahu tentang indeks sebelum melakukan, sehingga akan melakukan isi saat ini dari pohon kerja Anda ).git add
akan menambah atau memperbarui file dari pohon kerja ke dalam indeks Anda.sumber
git commit -a
(Anda perlu menambahkannyagit add
), jadi pohon kerja Anda mungkin memiliki file tambahan yang indeks Anda, repo lokal Anda, atau repo jarak jauh Anda tidak punya.HEAD
merujuk ke komit terbaru, jadi ketika Anda komit, Anda memperbaruiHEAD
ke komit baru Anda, yang cocok dengan indeks. Mendorong tidak ada hubungannya dengan itu - itu membuat cabang di cabang pertandingan jarak jauh di repo lokal Anda.Pohon yang bekerja
Pohon kerja Anda adalah file yang sedang Anda kerjakan.
Indeks git
"Indeks" git adalah tempat Anda meletakkan file yang ingin Anda komit ke repositori git.
Indeks ini juga dikenal sebagai cache yang , Cache direktori , tembolok direktori saat ini , area pementasan , dipentaskan file .
Sebelum Anda "mengkomit" (checkin) file ke repositori git, Anda harus terlebih dahulu menempatkan file dalam "indeks" git.
Indeks bukan direktori kerja: Anda dapat mengetik perintah seperti
git status
, dan git akan memberi tahu Anda file apa di direktori kerja Anda yang telah ditambahkan ke indeks git (misalnya, dengan menggunakangit add filename
perintah).Indeks bukan repositori git: file dalam indeks git adalah file yang git akan komit ke repositori git jika Anda menggunakan perintah git commit.
sumber
reset --hard HEAD
untuk memastikan bahwa indeks Anda == pohon kerja Anda. an then:mkdir history && git checkout-index --prefix history/ -a
Hasilnya adalah duplikasi seluruh pohon kerja Anda dihistory/
direktori Anda . Ergo git index> = direktori kerja gitecho untracked-data > untracked-file
, sebelum atau setelah langkahgit reset --HARD
dangit checkout-index
. Anda akan menemukan bahwa file yang tidak dilacak tidak ada dalamhistory
direktori. Anda juga dapat memodifikasi indeks dan pohon-kerja secara independen, meskipun memodifikasi indeks tanpa terlebih dahulu menyentuh pohon-pekerjaan itu sulit (harus menggunakangit update-index --index-info
).