Saya tidak sengaja berkata git rm -r .
. Bagaimana saya pulih dari ini?
Saya tidak berkomitmen.
Saya pikir semua file ditandai untuk dihapus dan juga dihapus secara fisik dari checkout lokal saya.
EDIT: Saya bisa (jika saya tahu perintah) kembali ke komit terakhir. Tetapi akan jauh lebih baik jika saya bisa membatalkannya git rm -r .
. Karena saya tidak begitu yakin apa yang saya lakukan setelah komit terakhir dan sebelum git rm -r .
.
-f
untukgit rm
git tidak akan menghapus file apa pun yang telah melakukan perubahan stage atau unstaged sehinggagit reset; git checkout .
harus memulihkan semuanya.git restore
:git restore -s@ -SW -- .
. Lihat jawaban saya di bawah ini .Jawaban:
Harus melakukannya. Jika Anda tidak memiliki perubahan tanpa komitmen yang Anda pedulikan, maka
harus secara paksa mengatur ulang semuanya ke komit terakhir Anda. Jika Anda memiliki perubahan yang tidak dikomit, tetapi perintah pertama tidak berhasil, simpan perubahan yang tidak dikomit itu dengan
git stash
:sumber
git reset --hard HEAD
hancurkan setiap perubahan yang berguna yang telah Anda buat di direktori induk dari direktori kerja saat ini.Saya git-rm beberapa file dan terus melakukan perubahan sebelum komit berikutnya ketika saya menyadari saya perlu beberapa file kembali. Daripada menyimpan dan mengatur ulang, Anda dapat checkout file-file individual yang Anda lewatkan / hapus jika Anda mau:
Ini membuat perubahan Anda yang tidak dikomit lainnya tetap utuh tanpa penyelesaian.
sumber
git rm
daripada seluruh rekursifgit rm -r
. Untuk penghapusan rekursif penuh, solusi lain mungkin lebih baik, tergantung pada jumlah file yang dihapus.Untuk mendapatkan kembali beberapa file atau folder, Anda dapat menggunakan yang berikut ini
Ini pertama akan membuat ulang entri indeks untuk
path/to/file
dan membuat ulang file seperti di komit terakhir, yaituHEAD
.Petunjuk: seseorang dapat mengirimkan hash komit ke kedua perintah untuk membuat ulang file dari komit yang lebih lama. Lihat
git reset --help
dangit checkout --help
untuk detailnya.sumber
git rm
operasi tunggal yang mudah tanpa menghapus perubahan lain yang tidak dikomit.Memperbarui:
Karena
git rm .
menghapus semua file dalam direktori ini dan direktori anak di checkout yang berfungsi serta dalam indeks, Anda harus membatalkan setiap perubahan ini:Ini harus melakukan apa yang Anda inginkan. Itu tidak memengaruhi folder induk dari kode atau indeks Anda yang sudah keluar.
Jawaban lama yang bukan:
akan melakukan triknya, dan tidak akan menghapus perubahan yang tidak dikomit yang Anda buat pada file Anda.
setelah itu Anda perlu mengulangi
git add
perintah yang telah Anda antri.sumber
git alias.co="checkout"
agargit co
checkout.Jika Anda berakhir dengan tidak ada yang bekerja di atas, Anda mungkin dapat mengambil data menggunakan saran dari sini: http://www.spinics.net/lists/git/msg62499.html
sumber
batalkan git rm
batalkan git rm -r
batalkan git rm -rf
Uncommitted changes
termasuknot staged changes
,staged changes but not committed
.sumber
git rm -rf
, karena dapat menghapus file yang tidak dilacak atau dipentaskan (hanya) juga.git rm -rf file
dangit rm -rf dir
tidak akan menghapus file yang tidak terlacak.Jika Anda sudah berkomitmen dan mendorong perubahan, Anda dapat melakukan ini untuk mendapatkan file kembali
sumber
Sudah ada beberapa jawaban yang baik, tetapi saya mungkin menyarankan sintaks yang sedikit digunakan yang tidak hanya berfungsi dengan baik, tetapi sangat eksplisit dalam apa yang Anda inginkan (karenanya tidak menakutkan atau misterius)
sumber
Dapatkan daftar komitmen
Misalnya, komit Stabil memiliki hash:
45ff319c360cd7bd5442c0fbbe14202d20ccdf81
sumber
Saya memiliki situasi yang identik. Dalam kasus saya, solusinya adalah:
sumber
Dengan Git 2.23+ (Agustus 2019), perintah yang tepat untuk mengembalikan file (dan indeks) adalah menggunakan ...
git restore
(bukanreset --hard
atau perintah membingungkangit checkout
)Itu adalah:
Atau bentuknya yang disingkat:
sumber
Saya memiliki masalah yang sama persis: membersihkan folder saya, mengatur ulang dan memindahkan file. Saya masuk: git rm . dan tekan enter; dan kemudian merasakan perutku sedikit mengendur. Untungnya, saya tidak mengetik git commit -m "" langsung.
Namun, perintah berikut
memulihkan segalanya, dan menyelamatkan hidupku.
sumber