Peringatan: jangan gunakan perintah berikut kecuali Anda ingin kehilangan pekerjaan yang tidak berkomitmen!
Menggunakan git resettelah 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-filesmencantumkan semua file yang diketahui git. Opsi -zmemaksakan format tertentu pada mereka, format yang diharapkan oleh xargs -0, yang kemudian memanggil rm -fmereka, 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-onlyberarti Anda hanya menginginkan nama file (lengkap) dan --diff-filter=Dberarti Anda hanya tertarik pada file yang dihapus. (Hei, bukankah kita hanya menghapus banyak hal?)
Ini kemudian disalurkan ke yang xargs -0kita lihat sebelumnya, yang memanggil git rm --cachedmereka, 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 resetmulai sekarang.
rm -fbukan perintah git dan tidak memiliki--cachedopsi. File lokal Anda telah dihapus sebelum Anda dieksekusigit rmjadi saya tidak berpikir Anda bisa menyalahkangit rmapa pun secara sah .