Membatalkan Perubahan: git restore
Membuang perubahan di working directory, mengeluarkan berkas dari staging, dan memulihkan berkas yang terhapus.
Salah edit itu wajar
Setiap developer pernah mengubah berkas lalu sadar perubahannya keliru, atau men-stage berkas yang belum siap. Git punya git restore untuk mengembalikan keadaan. Ada dua arah yang berbeda — pahami bedanya agar tidak kehilangan pekerjaan.
1) Membuang perubahan di working directory
git restore catatan.txt # kembalikan satu berkas ke versi staging/commit terakhir
git restore . # semua berkas
git restore src/ # satu folder
Peringatan: ini tidak bisa dibatalkan. Perubahan yang belum di-commit atau di-stage dibuang permanen karena Git tidak pernah menyimpannya. Periksa dengan git diff sebelum menjalankannya.
2) Mengeluarkan berkas dari staging (unstage)
git restore --staged catatan.txt
Perubahan di berkas tetap ada di working directory; hanya dikeluarkan dari staging. Aman. Git sendiri menyarankannya di keluaran git status ("use git restore --staged <file>...").
Ringkasan
| Situasi | Perintah | Efek |
|---|---|---|
| Berkas diubah, ingin dibuang | git restore f | Working directory kembali; edit hilang |
Salah git add | git restore --staged f | Keluar dari staging; edit tetap |
| Salah add dan ingin buang edit | git restore --staged --worktree f | Keduanya dikembalikan |
| Berkas terhapus tak sengaja | git restore f | Berkas dipulihkan dari commit |
Mengambil berkas dari commit lama
git restore --source=HEAD~2 index.html
Mengembalikan index.html seperti pada dua commit yang lalu, tanpa memindahkan branch. Cocok untuk "mengambil kembali" satu berkas dari masa lalu.
Cara lama (masih sering terlihat)
Sebelum git restore ada (Git 2.23, 2019), orang memakai git checkout -- berkas dan git reset HEAD berkas. Keduanya masih bekerja, tetapi git restore lebih jelas maksudnya.
Kebiasaan aman
- Jalankan
git statusdangit diffdulu. - Ragu? Commit dulu (di branch sementara), atau gunakan
git stash(bab 15). Commit dapat dipulihkan, perubahan yang tak pernah di-commit tidak.