Ada tiga tempat di mana file, katakanlah, dapat - pohon, indeks dan copy pekerjaan. Saat Anda baru saja menambahkan file ke folder, Anda menambahkannya ke copy pekerjaan.
Ketika Anda melakukan sesuatu seperti git add file
Anda menambahkannya ke indeks. Dan ketika Anda melakukan itu, Anda menambahkannya ke pohon juga.
Mungkin akan membantu Anda mengetahui tiga flag yang lebih umum di git reset:
reset git [- <mode>
] [ <commit>
]
Formulir ini mengatur ulang kepala cabang saat ini ke <commit>
dan mungkin memperbarui indeks (mengatur ulang ke pohon <commit>
) dan pohon yang bekerja tergantung pada <mode>
, yang harus menjadi salah satu dari yang berikut:
--soft
Tidak menyentuh file indeks atau pohon kerja sama sekali (tetapi me-reset kepala ke <commit>
, sama seperti semua mode lakukan). Ini membuat semua file Anda yang diubah "Perubahan untuk dikomit", seperti yang dikatakan status git.
--Campuran
Atur ulang indeks tetapi bukan pohon kerja (yaitu, file yang diubah disimpan tetapi tidak ditandai untuk komit) dan melaporkan apa yang belum diperbarui. Ini adalah tindakan default.
--keras
Atur ulang indeks dan pohon kerja. Setiap perubahan pada file yang dilacak di pohon kerja sejak <commit>
dibuang.
Sekarang, ketika Anda melakukan sesuatu seperti git reset HEAD
- apa yang sebenarnya Anda lakukan adalah git reset HEAD --mixed
dan itu akan "mereset" indeks ke keadaan sebelum Anda mulai menambahkan file / menambahkan modifikasi ke indeks (via git add
) Dalam hal ini, copy pekerjaan dan indeks (atau pementasan) sinkron, tetapi Anda membuat HEAD dan indeks untuk sinkron setelah reset.
git rm
di sisi lain menghapus file dari direktori yang berfungsi dan indeks dan ketika Anda melakukan, file tersebut dihapus dari pohon juga. git rm --cached
namun menghapus file dari indeks saja dan menyimpannya di copy pekerjaan Anda. Ini adalah kebalikan dari git add file
Dalam hal ini, Anda membuat indeks berbeda dari HEAD dan yang berfungsi, di dalamnya HEAD memiliki versi file yang sebelumnya dikomit, copy pekerjaan memiliki modifikasi terakhir jika ada atau konten dari HEAD dari file dan Anda menghapus file dari indeks. Komit sekarang akan menyinkronkan indeks dan struktur dan file akan dihapus.
git rm --cached
itugit diff
perintah tidak menunjukkan diff, tetapigit diff --cached
menunjukkan diff, seolah-olah masih cache. Thegit status
namun menunjukkan file sebagaiUntracked
. Sepertinya tidak konsisten.