Kami akan memulakan dengan menambahkan beberapa fail. Pada komit terakhir, kita akan menambah dan menghapus fail untuk mewujudkan keadaan yang tidak kemas. Kemudian kita akan kembali ke negeri sebelum kekacauan.
Anda boleh membuat folder yang dipanggil / test dan menjalankan perintah berikut untuk menginisialisasi Git dan membuat situasi yang dijelaskan di atas (Kami dengan sengaja melakukan komitmen terpisah untuk membuat sejarah):
$ git initRepositori Git kosong yang dimulakan di / Users / zakh_eecs / _work / LearnGIT / git_revert / test /.git /
$ echo x> fail_1.txt
$ git tambah -A
$ git commit -m "Menambah fail_1.txt "
[master (root-komitmen) 08caf5d] Menambah fail_1.txt
1 fail diubah, 1 sisipan (+)
buat mod 100644 fail_1.txt
$ echo y> file_2.txt
$ git tambah -A
$ git commit -m "Menambah fail_2.txt "
[master ba18a2f] Menambah fail_2.txt
1 fail diubah, 1 sisipan (+)
buat mod 100644 file_2.txt
$ echo z> fail_3.txt
$ git tambah -A
$ git commit -m "Menambah fail_3.txt "
[master 97f09ad] Menambah fail_3.txt
1 fail diubah, 1 sisipan (+)
buat mod 100644 file_3.txt
$ echo u> file_4.txt
$ git tambah -A
$ git commit -m "Menambah fail_4.txt "
[master 9caf084] Menambah fail_4.txt
1 fail diubah, 1 sisipan (+)
buat mod 100644 file_4.txt
$ echo v> fail_5.txt
$ git tambah -A
$ git commit -m "Menambah fail_5.txt "
[master 3f228b2] Menambah fail_5.txt
1 fail diubah, 1 sisipan (+)
buat mod 100644 file_5.txt
Sekiranya kita memeriksa folder kita, kita akan melihat keadaan berikut:
$ ls -1fail_1.txt
fail_2.txt
fail_3.txt
fail_4.txt
fail_5.txt
Sekiranya kita memeriksa sejarah, kita harus mempunyai fail berikut:
$ git log - talian3f228b2 Menambah fail_5.txt
9caf084 Menambah fail_4.txt
97f09ad Menambah fail_3.txt
ba18a2f Menambah fail_2.txt
08caf5d Menambah fail_1.txt
Sekarang mari buat kekacauan, kita akan memadam beberapa fail dan menambah fail yang tidak baik.
$ rm fail_2.txt$ rm fail_4.txt
$ echo w> my_bad_file.txt
$ git tambah -A
$ git commit-m "Menambah dan memadam fail tanpa memikirkan akibatnya"
[master 879fbf8] Menambah dan memadam fail tanpa memikirkan akibatnya
3 fail diubah, 1 sisipan (+), 2 penghapusan (-)
hapus mod 100644 fail_2.txt
hapus mod 100644 file_4.txt
buat mod 100644 my_bad_file.txt
Sekarang, ini adalah keadaan folder kami:
$ ls -1fail_1.txt
fail_3.txt
fail_5.txt
my_bad_file.txt
Dan inilah keadaan sejarah kita:
$ git log - talian879fbf8 Menambah dan memadam fail tanpa memikirkan akibatnya
3f228b2 Menambah fail_5.txt
9caf084 Menambah fail_4.txt
97f09ad Menambah fail_3.txt
ba18a2f Menambah fail_2.txt
08caf5d Menambah fail_1.txt
Kami sedar bahawa kami tidak mahu komitmen terakhir 879fbf8. Oleh itu, kami menggunakan arahan balik seperti berikut:
$ git mengembalikan 879fbf8Ini akan membuka tetingkap teks untuk mengedit komen automatik:
Kembalikan "Fail yang ditambahkan dan dihapus tanpa memikirkan akibatnya"Ini membalikkan komitmen 879fbf849c4bd6fb9a377604d6355c76b92a832c.
# Sila masukkan mesej komit untuk perubahan anda. Garisan bermula
# dengan '#' akan diabaikan, dan mesej kosong membatalkan komit.
# Pada ketua cawangan
# Perubahan yang akan dilakukan:
# Fail baru: file_2.txt
# Fail baru: file_4.txt
# Dipadam: my_bad_file.txt
#
Anda boleh mengubah komen. Kami akan menyimpannya sebagaimana adanya. Sebaik sahaja anda menyimpan tetingkap komen, tugas mengembalikan akan dilakukan:
$ git mengembalikan 879fbf8[master 6e80f0e] Kembalikan "Fail yang ditambahkan dan dihapus tanpa memikirkan akibatnya"
3 fail diubah, 2 sisipan (+), 1 penghapusan (-)
buat mod 100644 file_2.txt
buat mod 100644 file_4.txt
hapus mod 100644 my_bad_file.txt
Mari lihat folder kami sekarang:
$ ls -1fail_1.txt
fail_2.txt
fail_3.txt
fail_4.txt
fail_5.txt
Fail kami kembali mengikut urutan seperti sebelumnya. Semua penambahan dan penghapusan telah dikembalikan. Mari periksa log:
$ git log - talian6e80f0e Kembalikan "Fail yang ditambahkan dan dihapus tanpa memikirkan akibatnya"
879fbf8 Menambah dan memadam fail tanpa memikirkan akibatnya
3f228b2 Menambah fail_5.txt
9caf084 Menambah fail_4.txt
97f09ad Menambah fail_3.txt
ba18a2f Menambah fail_2.txt
08caf5d Menambah fail_1.txt
Terdapat komitmen baru 6e80f0e. Sebarang perubahan yang merupakan sebahagian daripada 879fbf8 dibatalkan dan kemudian dilakukan di 6e80f0e.
Amaran: Perintah tetapan semula Git membolehkan anda membuat pembatalan juga. Tetapi dalam kes reset (terutamanya hard reset), ia akan menghapus 879fbf8 melakukan seperti tidak pernah berlaku dan tidak akan ada 6e80f0e komited. Dengan arahan balik, semua orang dapat melihat perubahan yang telah berlaku. Dalam kes tetapan semula, tidak ada jejak yang tersisa. Oleh itu, adalah idea yang buruk untuk menggunakan perintah reset di repositori awam kerana ia boleh menyebabkan kekeliruan besar-besaran. Peraturan emas adalah - jangan gunakan reset di repositori awam, gunakan revert yang lebih selamat.
Kesimpulannya:
Perintah Git revert adalah cara cepat dan mudah untuk memperbaiki kesilapan anda. Ini adalah arahan yang harus anda ingat jika anda kerap bekerja dengan Git.
Sambung belajar:
- https: // git-scm.com / docs / git-balik
- https: // git-scm.com / docs / git-tetapkan semula
- Git: Pelajari Kawalan Versi dengan Git: Panduan pemula Ultimate langkah demi langkah
- Versi Kawalan dengan Git: Alat dan teknik hebat untuk pengembangan perisian kolaboratif
- Pro Git, Edisi ke-2