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.git reset --mixed
. Saya sedikit bingung dengan pernyataan yanggit rm --cached
bertolak belakanggit add
. Diambil secara harfiah, itu tidak benar dan dapat menyebabkan kerusakan. Dalam kasus saya, saya biasagit add
menambahkan file yang dimodifikasi ke area pementasan dan ingin kebalikan dari "yang menambahkan" bukan penambahan awal file. + Jawaban Greg Hewgill membantu saya mendapatkan gambaran yang lebih jelas.git rm --cached
'adalah kebalikan darigit add file
' menyesatkan.git reset file
lebih dekat menjadi kebalikan darigit add file
.Mungkin sebuah contoh akan membantu:
melawan
Perhatikan bahwa jika Anda belum mengubah apa pun , komit kedua tidak akan benar-benar melakukan apa pun.
sumber
--
Digunakan untuk memisahkan opsi perintah dari nama file. Jika ada cabang dan file bernamaasd
, makagit reset HEAD asd
akan ambigu. The--
mengatakan "semuanya berikut ini adalah nama file".git reset HEAD <file>
persis sama dengangit rm --cached <file>
dulugit add --intent-to-add <file>
?git rm --cached file
akan menghapus file dari atas panggung. Yaitu, ketika Anda mengkomit file akan dihapus.git reset HEAD -- file
hanya akan mengatur ulang file di area pementasan ke status di mana ia berada di komit HEAD, yaitu akan membatalkan perubahan yang Anda lakukan padanya sejak komit terakhir. Jika perubahan itu terjadi baru menambahkan file, maka mereka akan setara.sumber
git rm --cached file
agak berlawanangit add
, jawaban ini sangat masuk akal bagi saya, dan cukup ringkas. Hampir sesingkat komentar ini;)git rm --cached file
bukan kebalikan darigit add file
. Perilaku terjadi kebalikan darigit add file
dalam kasus tertentu di mana Anda telah menambahkan file baru, yang sebelumnya tidak terlacak. Dalam setiap kasus kebalikannyagit add file
adalahgit reset HEAD file
.git reset HEAD file
juga membalikgit add file
dalam kasus pertama (menambahkan file yang tidak terlacak), dan dalam setiap kasus, itulah sebabnya git menyarankan untuk dilakukan jika Anda ingin membalikkan git add.