Saya ingin memulihkan seluruh direktori (secara rekursif) dari riwayat repositori git saya.
Hanya ada 1 cabang (master).
Saya tahu komit di mana kesalahan dimasukkan.
Dapatkah saya menggunakan hash sha1 dari komit induk untuk memulihkan status direktori seperti sebelum kesalahan disertakan?
Saya memikirkan sesuatu seperti ini:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/
tapi tidak berhasil.
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
Jawaban:
coba tambahkan '-' antara revisi dan jalur:
Dan jika Anda ingin memulihkan direktori dari komit sebelumnya, Anda dapat mengganti hash komit dengan HEAD ~ 1, misalnya:
sumber
rm -Rf path/to/the/folder
kemudiangit checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
- Hasil: jalur itu memiliki file yang persis sama seperti di komit itu, tidak ada perbedaan dan tidak ada file tambahan yang telah dibuat setelah komit ini. Itulah yang saya inginkan.--
dilakukannya?Ada dua cara mudah untuk melakukannya:
Jika komit yang menyertakan kesalahan hanya menyertakan kesalahan, gunakan
git revert
untuk membalikkan efeknya.Jika tidak, jalan yang mudah adalah ini:
git checkout 348…
cp -a path/to/the/folder ../tmp-restore-folder
git checkout HEAD # or whatever
rm -rf path/to/the/folder
mv ../tmp-restore-folder path/to/the/folder
git add path/to/the/folder
git commit -m "revert …"
sumber
Jika Anda hanya melakukannya
git checkout <SHA-ID>
maka itu sementara akan memindahkan Anda ke sha-commit itu.Setiap objek komit menampung seluruh struktur disk pada saat itu, jadi jika Anda memiliki file di sana dan perlu menyalinnya, Anda dapat melakukannya. Peringatan, Anda tidak akan berada di cabang mana pun, jadi Anda harus kembali ke master sebelum menyalin file ke pohon kerja Anda dan melakukannya.
sumber