Peringatan: jangan gunakan perintah berikut kecuali Anda ingin kehilangan pekerjaan yang tidak berkomitmen!
Menggunakan git reset
telah dijelaskan, tetapi Anda meminta penjelasan tentang perintah yang di-piped juga, jadi begini:
git ls-files -z | xargs -0 rm -f
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
Perintah ini git ls-files
mencantumkan semua file yang diketahui git. Opsi -z
memaksakan format tertentu pada mereka, format yang diharapkan oleh xargs -0
, yang kemudian memanggil rm -f
mereka, yang berarti menghapusnya tanpa memeriksa persetujuan Anda.
Dengan kata lain, "daftarkan semua file yang diketahui git dan hapus salinan lokal Anda".
Lalu kita mulai git diff
, yang menunjukkan perubahan antara berbagai versi item yang diketahui git. Itu bisa berupa perubahan antara pohon yang berbeda, perbedaan antara salinan lokal dan salinan jarak jauh, dan sebagainya.
Seperti yang digunakan di sini, ini menunjukkan perubahan yang tidak dipentaskan; file yang telah Anda ubah tetapi belum berkomitmen. Opsi ini --name-only
berarti Anda hanya menginginkan nama file (lengkap) dan --diff-filter=D
berarti Anda hanya tertarik pada file yang dihapus. (Hei, bukankah kita hanya menghapus banyak hal?)
Ini kemudian disalurkan ke yang xargs -0
kita lihat sebelumnya, yang memanggil git rm --cached
mereka, yang berarti bahwa mereka dihapus dari cache, sementara pohon yang bekerja harus dibiarkan sendiri - kecuali bahwa Anda baru saja menghapus semua file dari pohon kerja Anda. Sekarang mereka juga dihapus dari indeks Anda.
Dengan kata lain, semua perubahan, dipentaskan atau tidak dipentaskan, hilang, dan pohon kerja Anda kosong. Menangis, checkout file Anda segar dari asal atau jarak jauh, dan ulangi pekerjaan Anda. Mengutuk sadis yang menulis garis-garis neraka ini; Saya tidak tahu sama sekali mengapa ada orang yang mau melakukan ini.
TL; DR: Anda baru saja menyemprot semuanya; mulai lagi dan gunakan git reset
mulai sekarang.
rm -f
bukan perintah git dan tidak memiliki--cached
opsi. File lokal Anda telah dihapus sebelum Anda dieksekusigit rm
jadi saya tidak berpikir Anda bisa menyalahkangit rm
apa pun secara sah .