Bagaimana cara menggunakan 'git reset --hard HEAD' untuk kembali ke komit sebelumnya?

Saya tahu bahwa Git melacak perubahan yang saya buat pada aplikasi saya, dan menyimpannya sampai saya melakukan perubahan, tetapi di sini, di mana saya menutup telepon:

Ketika saya ingin kembali ke komit sebelumnya, saya menggunakan:

 git reset --hard HEAD 

Dan git kembali:

 HEAD is now at 820f417 micro 

Bagaimana cara mengembalikan file pada hard drive saya ke komit sebelumnya?

>

 git add . git commit -m "revert" 

Tetapi tidak ada file yang berubah di hard drive saya ...

Apa yang saya lakukan benar / salah?

735
02 марта '12 в 9:36 2012-03-02 09:36 ditetapkan oleh Brian McDonough 02 Maret 12 di 9:36 2012-03-02 09:36
@ 2 balasan

Pertama-tama, selalu perlu dicatat bahwa git reset --hard adalah perintah yang berpotensi berbahaya, karena ia membuang semua perubahan yang tidak dikomit. Untuk alasan keamanan, Anda harus selalu memastikan bahwa output git status bersih (mis. Kosong) sebelum menggunakannya.

Pertama, Anda mengatakan yang berikut:

Jadi, saya tahu bahwa Git melacak perubahan yang saya buat dalam aplikasi saya, dan itu tetap berlaku sampai saya membuat perubahan, tetapi di sini, di mana saya menggantung:

Ini salah. Git hanya mencatat status file saat Anda meletakkannya (menggunakan git add ) atau saat Anda membuat komit. Setelah Anda membuat komit di mana file proyek Anda berada dalam keadaan tertentu, mereka sangat aman, tetapi sampai saat itu Git tidak melacak perubahan dalam file Anda. (Misalnya, bahkan jika Anda membuat git add untuk membuat versi baru file, itu akan menimpa versi file yang disiapkan sebelumnya di area persiapan.)

Dalam pertanyaan Anda, Anda kemudian menanyakan hal berikut:

Ketika saya ingin kembali ke komit sebelumnya, saya menggunakan: git reset --hard HEAD Dan git kembali: HEAD sekarang di 820f417 mikro

Bagaimana cara mendapatkan file di hard drive saya kembali ke komit sebelumnya?

Jika Anda menjalankan git reset --hard <SOME-COMMIT> maka Git akan:

  • Buat cabang Anda saat ini (biasanya master ) kembali ke titik <SOME-COMMIT> .
  • Kemudian, buat file di pohon kerja Anda dan indeks ("area staging") sama dengan versi yang diperbaiki di <SOME-COMMIT> .

HEAD menunjuk ke cabang Anda saat ini (atau komit saat ini), sehingga semua yang di- git reset --hard HEAD akan menghapus semua perubahan yang belum Anda lakukan.

Jadi, anggap bahwa komitmen baik yang ingin Anda kembalikan adalah f414f31 . (Anda dapat menemukannya melalui git log atau browser riwayat.) Kemudian Anda memiliki beberapa opsi berbeda tergantung pada apa yang ingin Anda lakukan:

  • Alih-alih, ubah cabang saat ini untuk menunjuk ke komit yang lebih lama. Anda dapat melakukan ini dengan git reset --hard f414f31 . Namun, ini menulis u>f414f31 tidak akan lagi berada dalam sejarah cabang master Anda.
  • Buat komit baru yang mewakili status proyek yang sama dengan f414f31 , tetapi tambahkan saja ke cerita sehingga Anda tidak kehi>jawaban ini - sesuatu seperti:

     git reset --hard f414f31 git reset --soft HEAD@{1} git commit -m "Reverting to the state of the project at f414f31" 
846
02 марта '12 в 11:32 2012-03-02 11:32 jawabannya diberikan oleh Mark Longair 02 Maret '12 di 11:32 2012-03-02 11:32

PERINGATAN: git clean -f akan menghapus file-file yang tidak terlacak, yang berarti file-file itu hi> Pastikan Anda benar-benar ingin menghapus semua file yang tidak terlacak sebelum melakukan ini.


Coba ini dan lihat git clean -f .

border=0

git reset --hard tidak akan menghapus file yang tidak git reset --hard , sedangkan git-clean akan menghapus file dari direktori root yang dipantau yang tidak berada di bawah pelacakan Git.

Atau, seperti yang dikatakan @Paul Betts, Anda dapat melakukannya (tapi hati-hati - ini juga menghapus semua file yang diabaikan)

  • git clean -df
  • git clean -xdf PERHATIAN! Ini juga akan menghapus file yang diabaikan.
170
02 марта '12 в 9:48 2012-03-02 09:48 jawabannya diberikan uday 02 Maret '12 jam 9:48 2012-03-02 09:48

Pertanyaan lain tentang tag atau Ajukan Pertanyaan