Beberapa referensi bagus tentang topik-topik itu:
Saya menggunakan indeks sebagai pos pemeriksaan .
Ketika saya akan membuat perubahan yang mungkin serba salah - ketika saya ingin menjelajahi beberapa arah yang saya tidak yakin apakah saya dapat menindaklanjuti atau bahkan apakah itu ide yang baik, seperti refactoring yang menuntut secara konseptual atau mengubah suatu tipe representasi - Saya memeriksa pos kerja saya ke dalam indeks. Jika ini adalah perubahan pertama yang saya buat sejak komit terakhir saya, maka saya dapat menggunakan repositori lokal sebagai pos pemeriksaan, tetapi seringkali saya memiliki satu perubahan konseptual yang saya terapkan sebagai serangkaian langkah kecil. Saya ingin memeriksa titik setelah setiap langkah, tetapi simpan komit sampai saya kembali bekerja, kode diuji.
Catatan:
yang ruang kerja adalah pohon direktori (sumber) file yang Anda lihat dan edit.
The Indeks adalah satu, besar, file biner dalam <baseOfRepo>/.git/index
, yang berisi daftar semua file di cabang saat ini, mereka sha1 checksum, perangko waktu dan nama file - tidak direktori lain dengan salinan file di dalamnya.
The repositori lokal adalah direktori tersembunyi ( .git
) termasuk objects
direktori yang berisi semua versi setiap file dalam repo (cabang lokal dan salinan dari cabang remote) sebagai terkompresi "gumpalan" file.
Jangan menganggap empat 'disk' yang diwakili dalam gambar di atas sebagai salinan terpisah dari file repo.
Mereka pada dasarnya bernama referensi untuk komitmen Git. Ada dua jenis ref utama: tag dan head.
- Tag adalah referensi tetap yang menandai titik tertentu dalam sejarah, misalnya v2.6.29.
- Sebaliknya, kepala selalu tergerak untuk mencerminkan posisi pengembangan proyek saat ini.
(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
mana 1
komit pertama dan 4
yang terakhir)
Sekarang kita tahu apa yang terjadi di proyek.
Tetapi untuk mengetahui apa yang terjadi di sini, saat ini ada referensi khusus yang disebut HEAD. Ini melayani dua tujuan utama:
- itu memberitahu Git yang berkomitmen untuk mengambil file dari saat Anda checkout, dan
- itu memberi tahu Git di mana harus meletakkan komit baru ketika Anda melakukan.
Ketika Anda menjalankannya git checkout ref
menunjuk HEAD
ke referensi yang Anda tunjuk dan mengekstrak file dari itu. Ketika Anda menjalankannya git commit
menciptakan objek komit baru, yang menjadi anak saat ini HEAD
. Biasanya HEAD
menunjuk ke salah satu kepala, jadi semuanya bekerja dengan baik.
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.