Dalam kebanyakan kasus, ya.
Bergantung pada keadaan repositori Anda ketika Anda menjalankan perintah, efek dari git reset --hard
can berkisar dari sepele ke membatalkan, pada dasarnya tidak mungkin.
Di bawah ini saya telah membuat daftar berbagai skenario yang mungkin berbeda, dan bagaimana Anda dapat pulih dari itu.
Semua perubahan saya dilakukan, tetapi sekarang komit hilang!
Situasi ini biasanya terjadi ketika Anda menjalankan git reset
dengan argumen, seperti pada git reset --hard HEAD~
. Jangan khawatir, ini mudah untuk dipulihkan!
Jika Anda hanya berlari git reset
dan tidak melakukan hal lain sejak itu, Anda dapat kembali ke posisi semula dengan one-liner ini:
git reset --hard @{1}
Ini akan mereset cabang Anda saat ini dalam keadaan apa pun sebelum diubah terakhir kali (dalam kasus Anda, modifikasi terbaru pada cabang akan menjadi hard reset yang ingin Anda batalkan).
Namun, jika Anda telah melakukan modifikasi lain pada cabang Anda sejak reset, one-liner di atas tidak akan berfungsi. Alih-alih, Anda harus berlari untuk melihat daftar semua perubahan terbaru yang dilakukan pada cabang Anda (termasuk me-reset). Daftar itu akan terlihat seperti ini:git reflog
<branchname>
7c169bd master@{0}: reset: moving to HEAD~
3ae5027 master@{1}: commit: Changed file2
7c169bd master@{2}: commit: Some change
5eb37ca master@{3}: commit (initial): Initial commit
Temukan operasi dalam daftar ini yang ingin Anda "batalkan". Pada contoh di atas, itu akan menjadi baris pertama, yang bertuliskan "reset: pindah ke HEAD ~". Kemudian salin representasi komit sebelum (di bawah) operasi itu. Dalam kasus kami, itu akan menjadi master@{1}
(atau 3ae5027
, keduanya mewakili komit yang sama), dan jalankan git reset --hard <commit>
untuk mereset cabang Anda saat ini kembali ke komit itu.
Saya mengadakan perubahan dengan git add
, tetapi tidak pernah berkomitmen. Sekarang perubahan saya hilang!
Ini agak sulit untuk dipulihkan. git memang memiliki salinan dari file yang Anda tambahkan, tetapi karena salinan ini tidak pernah terikat pada komit tertentu, Anda tidak dapat mengembalikan perubahan sekaligus. Sebagai gantinya, Anda harus mencari file individual di database git dan mengembalikannya secara manual. Anda dapat melakukan ini menggunakan git fsck
.
Untuk detailnya, lihat Undo git reset --hard dengan file yang tidak dikomit di area stage .
Saya memiliki perubahan pada file di direktori kerja saya yang tidak pernah saya laksanakan git add
, dan tidak pernah komit. Sekarang perubahan saya hilang!
Uh oh. Aku benci mengatakan ini padamu, tapi kamu mungkin kurang beruntung. git tidak menyimpan perubahan yang tidak Anda tambahkan atau komit padanya, dan sesuai dengan dokumentasi untukgit reset
:
--keras
Atur ulang indeks dan pohon kerja. Setiap perubahan pada file yang dilacak di pohon kerja sejak <commit>
dibuang.
Ada kemungkinan bahwa Anda mungkin dapat memulihkan perubahan Anda dengan semacam utilitas pemulihan disk atau layanan pemulihan data profesional, tapi pada saat ini itu mungkin masalah lebih dari itu layak.