Secara tidak sengaja, dengan menggunakan GUI sebagai lawan CLI, saya menghapus setiap file dalam proyek Mercurial.
Saya pulih dengan Kembalikan ok dan kehilangan beberapa pekerjaan, yang karena saya memiliki mesin waktu saya dapat dengan mudah kembali. Tetapi apakah ada cara untuk menghapus / membatalkan penghapusan file semacam itu? Tersandung melalui manual dan googled tapi tidak bisa melihat apa-apa. Ada plugin?
Saya mungkin menjawab pertanyaan saya sendiri di sini tetapi file telah hilang dari direktori dan tidak ada di sampah untuk dipulihkan, jadi saya berasumsi bahwa Hapus tidak dapat dibatalkan?
ps Saya tahu itu hg forget
atau hg remove -Af
akan menghapus tanpa menghapus dari direktori tetapi pertanyaan saya berkaitan dengan kesalahan yang saya buat sebagai lawan dari pemikiran keren tindakan melalui.
Jawaban:
Pertama, gunakan
hg grep
untuk menemukan file terhapus yang ingin Anda pulihkan. Output dari perintah ini akan menunjukkan kepada Anda revisi terakhir yang file tersebut ada, dan jalur ke file yang dihapus. Kedua, jalankanhg revert -r <revision number> <path to deleted file>
File yang dihapus sekarang akan ada dalam copy pekerjaan Anda, siap untuk dikomit kembali.sumber
hg log -I '**file.ext'
Kutipan dari komentar:
Jika demikian, maka Anda hanya perlu memperbarui direktori kerja ke revisi sebelumnya:
Catat angka revisi negatif. Jika file yang Anda hapus tidak ada dalam revisi sebelumnya, Anda dapat menemukannya dengan menggunakan:
sumber
Nah ini berhasil untuk saya.
sumber
Untuk Mercurial 1.6 ke atas
Jika Anda mengetahui nama file hapus, Anda dapat menemukan revisinya dengan mudah dengan:
Ini akan memberi Anda revisi di witch file bernama NAME.c (di root) dihapus.
Kemudian Anda dapat mengembalikan file ke revisi sebelumnya dengan (seperti jawaban lain):
Anda dapat menggunakan pola nama file untuk menyesuaikan dengan apa yang Anda ketahui, misalnya Anda dapat menggunakan
**/NAME.c
untuk mencari di semua direktori. Anda dapat membacanya di File Name Patters . Dan gunakan tautan ini untuk mengetahui tentang spesifikasi revset baru .sumber
Tambahan untuk jawaban yang diterima - ini lebih cepat jika Anda ingin mengurungkan semua penghapusan dalam sebuah commit. Saya menghapus folder besar dengan beberapa ratus file di dalamnya dan melakukannya
hg addremove
, yang sama sekali bukan maksud saya, jadi harus membatalkan semua penghapusan tersebut.Menggunakan Temukan file yang dihapus dalam sejarah repositori Mercurial, cepat? + xargs + tr, kembalikan semua revisi -3 penghapusan ke versi dari revisi -4:
Perhatikan bahwa ini akan gagal jika ada file Anda yang memiliki spasi pada namanya; http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html tampaknya tidak memiliki template apa pun yang saat
{file_dels}
ini dipisahkan\n
.sumber
Anda dapat membatalkan komit terakhir pada repo dengan
hg rollback
. Hanya ada satu tingkat rollback yang tersedia, jadi jika Anda melakukan penghapusan dengan lebih dari satu commit, ini tidak akan sepenuhnya membatalkan perubahan Anda. Ini hanya berfungsi di repositori lokal Anda, jadi jika Anda telah mendorong Anda tidak akan dapat membatalkannya di repo jarak jauh.sumber
hg rollback
tidak akan memulihkan file yang dihapus karena penghapusan file bukan bagian dari transaksi komit.Anda dapat menghapus revisi yang dilakukan menggunakan
hg strip
perintah, yang disediakan oleh ekstensi mq (Mercurial Queues). Ini akan mengembalikan file Anda.Buat cadangan sebelum mencobanya, karena itu akan mengubah database perubahan Mercurial.
sumber
Metode di bawah ini sangat mudah dan sangat bodoh sehingga tidak bisa salah. Jika Anda telah menghapus atau mengganti nama banyak file, itu akan baik-baik saja.
dan sekarang Anda memulai mc (atau Far Manager) dan membandingkan apa itu vs apa jadinya.
setelah selesai, hapus saja
mydirectory1
.sumber
Yang berikut berhasil untuk saya.
(Opsional, untuk mengembalikan semua file)
sumber