Jika sebuah berkas menghilang dari proyek Mac Anda sebelum sempat di-commit, periksa Tong Sampah Mac serta pemulihan Time Machine atau cloud terlebih dahulu. Kemudian periksa Git: Git dapat memulihkan berkas yang terhapus jika versinya ada di indeks atau sebuah commit, dan mungkin dapat menemukan konten yang tersimpan sebagai objek yang tidak dapat dijangkau (unreachable object). Jika berkas tersebut hanya ada sebagai konten salinan kerja yang belum disimpan atau belum di-stage, Git mungkin tidak memiliki salinannya. Jalankan pemeriksaan ini sebelum membuat berkas baru di dalam proyek.
1. Periksa Tong Sampah dan cari di Mac
Buka Tong Sampah dari Dock dan cari berkas berdasarkan namanya. Jika Anda menemukannya, klik sambil menekan tombol Control (control-click) lalu pilih Kembalikan untuk memindahkannya kembali ke lokasi aslinya, atau seret ke tempat yang aman. Apple juga menyarankan untuk mencari dengan Spotlight jika berkas tersebut mungkin telah dipindahkan atau diganti namanya. Untuk folder proyek di iCloud Drive, periksa juga Tong Sampah dan opsi Baru Dihapus atau Pemulihan Data di iCloud; Apple menyatakan bahwa berkas iCloud Drive yang terhapus dan memenuhi syarat umumnya dapat dipulihkan dalam waktu 30 hari. Petunjuk pemulihan iCloud Apple
Jika alat pengembang menghapus berkas secara langsung, atau Tong Sampah telah dikosongkan, lanjutkan ke langkah berikutnya. Jangan berasumsi bahwa setiap penghapusan pasti masuk ke Tong Sampah.
2. Cari di Time Machine, termasuk snapshot lokal
Jika Time Machine telah diaktifkan, hubungkan disk cadangan jika tersedia. Di Finder, buka folder yang sebelumnya memuat berkas tersebut, gunakan Spotlight untuk membuka Time Machine, lalu telusuri garis waktu atau panah cadangan ke tanggal sebelum penghapusan terjadi. Pilih berkas dan klik Pulihkan. Apple menyebutkan bahwa item yang dipulihkan akan kembali ke lokasi aslinya, jadi pertimbangkan untuk memulihkannya ke lokasi terpisah jika Anda ingin membandingkan versi sebelum mengganti apa pun. Panduan Apple untuk memulihkan item Time Machine
Disk cadangan yang terputus tidak serta-merta menutup kemungkinan pemulihan. Time Machine dapat menggunakan snapshot lokal yang disimpan di Mac, tetapi ini bersifat sementara: Apple menyatakan bahwa snapshot umumnya disimpan setiap jam dan disimpan selama 24 jam, dengan snapshot tambahan bergantung pada ruang penyimpanan yang tersedia. Snapshot ini hanya ada saat Time Machine sedang digunakan, dan bukan merupakan pengganti cadangan eksternal. Tentang snapshot lokal Time Machine
3. Pulihkan berkas terlacak dari Git
Buka Terminal, berpindahlah ke direktori proyek, dan periksa status berkas sebelum memulihkan apa pun:
git status --short
Jika jalur berkas yang terhapus muncul dan berkas tersebut memang terlacak, pulihkan dari indeks menggunakan jalur relatif proyeknya:
git restore -- path/to/file.ext
Perintah ini akan menyalin versi yang diindeks ke dalam pohon kerja (working tree). Jika indeks tidak memuat berkas tersebut, tetapi berkas ada di commit terakhir, pulihkan dari HEAD:
git restore --source=HEAD -- path/to/file.ext
Perbedaannya penting: git restore secara bawaan menggunakan indeks untuk pemulihan pohon kerja; --source=HEAD secara eksplisit memilih commit terakhir. Pemulihan akan menimpa jalur pohon kerja yang ditentukan dengan versi yang dipilih, jadi salin terlebih dahulu berkas apa pun di sana yang isinya penting. Git mendokumentasikan sumber pemulihan dan perilaku ini dalam manual git restore.
Perintah-perintah ini tidak dapat memulihkan berkas baru yang belum pernah terlacak (untracked) atau pengeditan yang tidak pernah di-stage maupun di-commit. Git hanya mengetahui versi yang sempat masuk ke dalam indeks, commit, atau basis data objeknya.
4. Cari objek tak terjangkau Git sebagai upaya terakhir
Terkadang Git telah menyimpan konten berkas meskipun tidak ada branch atau commit yang mengarah kepadanya—misalnya, versi yang sempat di-stage lalu dihapus dari indeks. Dari direktori proyek, periksa objek-objek yang tidak terjangkau (unreachable objects):
git fsck --unreachable
Git mungkin akan melaporkan blob yang tidak terjangkau diikuti dengan ID objek. Untuk memeriksa kandidat tanpa mengubah proyek, gunakan:
git cat-file -p OBJECT_ID
Ganti OBJECT_ID dengan ID yang dilaporkan. Jika keluarannya adalah berkas yang hilang, alihkan ke salinan pemulihan di luar proyek, misalnya:
git cat-file -p OBJECT_ID > "$HOME/Desktop/recovered-file.txt"
Nama berkas dan ekstensi di sini hanyalah contoh; pilih tujuan dan nama yang sesuai untuk berkas tersebut. Blob Git menyimpan konten, bukan jalur aslinya, sehingga Anda mungkin perlu memeriksa kandidat dan menentukan sendiri nama yang tepat. git fsck melaporkan objek yang tidak terjangkau, dan opsinya --lost-found dapat menulis konten blob di bawah .git/lost-found/other/; kedua metode ini tidak menjamin adanya versi yang dapat dipulihkan. Dokumentasi git fsck Git
Saat tidak ada sumber pemulihan yang memiliki berkas tersebut
Jika Tong Sampah, cadangan, pemulihan cloud, indeks Git, commit, dan objek Git yang tidak terjangkau tidak memuatnya, berkas salinan mungkin memang tidak tersedia melalui alat-alat terdokumentasi ini. Khususnya, berkas untracked yang tidak pernah di-stage berada di luar riwayat penyimpanan Git. Periksa riwayat lokal (local history) editor Anda sendiri atau layanan pencadangan lain jika Anda menggunakannya; ketersediaan dan langkah pemulihan bergantung pada produk tersebut. Pertahankan kondisi proyek apa adanya saat Anda menyelidiki, dan simpan konten yang berhasil dipulihkan dengan nama baru hingga Anda memastikan bahwa itu adalah versi yang Anda butuhkan.
Sumber
- Jika Anda kehilangan berkas di iCloud Drive — Apple Support
- Memulihkan item yang dicadangkan dengan Time Machine di Mac — Apple Support
- Tentang snapshot lokal Time Machine — Apple Support
- git restore — Git
- git fsck — Git