Saya tahu bahwa Git trek perubahan yang saya buat untuk aplikasi saya, dan itu berlaku pada mereka sampai saya melakukan perubahan, tapi di sini's di mana saya'm hung up:
Ketika saya ingin kembali ke commit sebelumnya saya gunakan:
git reset --hard HEAD
Dan Git kembali:
HEAD is now at 820f417 micro
Bagaimana aku kemudian mengembalikan file pada hard drive saya kembali ke yang sebelumnya melakukan?
Langkah berikutnya adalah:
git add .
git commit -m "revert"
Tapi tak satu pun dari file yang telah berubah pada hard drive...
Apa yang saya lakukan benar/salah?
Pertama, it's selalu dicatat bahwa git reset --hard
yang berpotensi berbahaya perintah, karena membuang semua perubahan yang belum dikomit. Untuk keamanan, anda harus selalu memeriksa bahwa output dari git status
bersih (yang kosong) sebelum menggunakannya.
Awalnya anda mengatakan sebagai berikut:
Jadi saya tahu bahwa Git trek perubahan yang saya buat untuk aplikasi saya, dan itu berlaku pada mereka sampai saya melakukan perubahan, tapi di sini's di mana saya'm hung up:
Yang's benar. Git hanya mencatat keadaan file ketika anda panggung mereka (dengan git add
) atau ketika anda membuat sebuah komitmen. Setelah anda've dibuat komit yang memiliki file proyek anda dalam keadaan tertentu, mereka're sangat aman, tapi sampai saat Git's tidak benar-benar "pelacakan perubahan" untuk file anda. (misalnya, bahkan jika anda melakukan git add
untuk tahap versi baru dari file, yang menimpa sebelumnya dipentaskan versi dari file yang di area stage.)
Dalam pertanyaan anda, anda kemudian pergi untuk meminta hal-hal berikut:
Ketika saya ingin kembali ke commit sebelumnya saya gunakan: git reset --keras KEPALA Dan git kembali: KEPALA sekarang di 820f417 mikro
Bagaimana aku kemudian mengembalikan file pada hard drive saya kembali ke yang sebelumnya melakukan?
Jika anda melakukan git reset --hard <BEBERAPA di-COMMIT>
maka Git akan:
master
) kembali ke titik di <BEBERAPA di-COMMIT>
.<BEBERAPA di-COMMIT>
.KEPALA
poin untuk anda saat ini cabang (atau saat melakukan), sehingga semua yang git reset --keras KEPALA
akan lakukan adalah untuk membuang setiap perubahan yang belum dikomit yang anda miliki.
Jadi, misalkan baik melakukan hal yang anda ingin untuk kembali ke f414f31
. (Anda dapat menemukan bahwa melalui git log
atau sejarah browser.) Maka anda memiliki beberapa pilihan yang berbeda tergantung pada apa yang ingin anda lakukan:
git reset --hard f414f31
. Namun, ini adalah menulis ulang sejarah cabang anda, sehingga anda harus menghindari jika anda've shared cabang ini dengan siapa pun. Juga, melakukan yang anda lakukan setelah f414f31
tidak akan lagi dalam sejarah para master
cabang.f414f31
, tetapi hanya menambahkan bahwa pada sejarah, sehingga anda don't kehilangan sejarah. Anda dapat melakukannya dengan menggunakan langkah-langkah yang disarankan dalam jawaban - sesuatu seperti:git reset --hard f414f31 git reset --KEPALA lembut@{1} git commit-m "Kembali ke negara dari proyek di f414f31"
PERINGATAN:
git bersih -f
akan menghapus terpantau file, yang berarti mereka're pergi untuk selamanya karena mereka tidak't disimpan dalam repositori. Pastikan anda benar-benar ingin menghapus semua terpantau file sebelum melakukan hal ini.
Mencoba ini dan melihat git bersih -f
.
git reset --hard
tidak akan menghapus terpantau file, di mana sebagai git-bersih
akan menghapus semua file dari dilacak direktori root yang tidak di bawah Git pelacakan.
Atau, seperti @Paul Betts mengatakan, anda dapat melakukan ini (hati-hati meskipun - yang menghilangkan semua file diabaikan juga)
git bersih -df
git bersih -xdf
hati-HATI! Ini juga akan menghapus file diabaikan