Ketiga perintah ini memiliki tujuan yang sepenuhnya berbeda. Mereka bahkan tidak jauh mirip.
git revert
Perintah ini menciptakan komit baru yang membatalkan perubahan dari komit sebelumnya. Perintah ini menambahkan sejarah baru ke proyek (itu tidak mengubah sejarah yang ada).
git checkout
Perintah ini memeriksa konten dari repositori dan meletakkannya di pohon pekerjaan Anda. Itu juga dapat memiliki efek lain, tergantung pada bagaimana perintah itu dipanggil. Misalnya, itu juga dapat mengubah cabang yang sedang Anda kerjakan. Perintah ini tidak membuat perubahan apa pun pada riwayat.
git reset
Perintah ini sedikit lebih rumit. Ini sebenarnya melakukan beberapa hal yang berbeda tergantung pada bagaimana ia dipanggil. Ini memodifikasi indeks (yang disebut "area pementasan"). Atau perubahan yang dilakukan oleh kepala cabang saat ini mengarah ke. Perintah ini dapat mengubah riwayat yang ada (dengan mengubah komit yang direferensikan cabang).
Menggunakan perintah ini
Jika komit telah dibuat di suatu tempat dalam sejarah proyek, dan Anda kemudian memutuskan bahwa komit itu salah dan seharusnya tidak dilakukan, maka itu git revert
adalah alat untuk pekerjaan itu. Ini akan membatalkan perubahan yang dilakukan oleh komit buruk, merekam "undo" dalam sejarah.
Jika Anda telah memodifikasi file di pohon kerja Anda, tetapi belum melakukan perubahan, maka Anda dapat menggunakan git checkout
untuk checkout salinan baru-dari-repositori file.
Jika Anda telah membuat komit, tetapi belum membagikannya dengan orang lain dan Anda memutuskan tidak menginginkannya, maka Anda dapat menggunakannya git reset
untuk menulis ulang sejarah sehingga seolah-olah Anda tidak pernah membuat komit itu.
Ini hanya beberapa skenario penggunaan yang mungkin. Ada perintah lain yang dapat berguna dalam beberapa situasi, dan ketiga perintah di atas memiliki kegunaan lain juga.
git reset
dangit checkout
dapat melakukan hal yang persis sama. Mengatakan bahwa mereka "bahkan tidak jauh mirip" bukan hanya berlebihan: itu bahkan tidak benar jauh. Kedua perintah ini dapat melakukan banyak hal yang berbeda, beberapa di antaranya benar-benar tumpang tindih. Contoh:git reset --hard
dangit checkout -- .
akan melakukan hal yang sama persis. Dan berbicara secara logis,git reset --hard <path>
dangit checkout <path>
juga harus melakukan hal yang persis sama - git namun mencegah Anda melakukan itu. Membingungkan kedua perintah ini SANGAT mudah.git reset --hard <path>
seperti yang Anda bisagit checkout <path>
karena kedua perintah melakukan sesuatu yang sama sekali berbeda.git reset
memberitahu Git untuk memindahkan HEAD ke komit yang berbeda.git checkout
di sisi lain tidak meminta Git untuk melakukan apa pun dengan KEPALA sama sekali. Itu meninggalkan KEPALA sendirian dan hanya memeriksa file. Ya, Anda dapat membuat mereka sedemikian rupa sehingga mereka memiliki efek yang serupa. Tetapi apa yang sebenarnya mereka lakukan benar - benar berbeda.Katakanlah Anda memiliki komitmen:
git revert B
, akan membuat komit yang membatalkan perubahan padaB
.git revert A
, akan membuat komit yang membatalkan perubahanA
, tetapi tidak akan menyentuh perubahanB
Perhatikan bahwa jika perubahan
B
tergantung pada perubahanA
, pengembalianA
tidak dimungkinkan.git reset --soft A
, akan mengubah histori komit dan repositori; staging dan direktori kerja masih akan dalam kondisiC
.git reset --mixed A
, akan mengubah histori komit, repositori, dan pementasan; direktori kerja masih dalam statusC
.git reset --hard A
, akan mengubah histori komit, repositori, staging dan direktori kerja; Anda akan kembali ke keadaanA
sepenuhnya.sumber
git revert
digunakan untuk membatalkan komit sebelumnya. Di git, Anda tidak dapat mengubah atau menghapus komit sebelumnya. (Sebenarnya Anda bisa, tetapi dapat menyebabkan masalah.) Jadi, alih-alih mengedit komit sebelumnya, kembalikan memperkenalkan komit baru yang membalikkan komit sebelumnya.git reset
digunakan untuk membatalkan perubahan dalam direktori kerja Anda yang belum dikomit.git checkout
digunakan untuk menyalin file dari beberapa komit lain ke pohon kerja Anda saat ini. Itu tidak secara otomatis melakukan file.sumber
git reset --soft
me-reset HEAD saja,git reset --hard
me-reset HEAD dan direktori kerja Anda.git checkout
memodifikasi pohon kerja Anda,git reset
memodifikasi referensi cabang mana yang Anda tuju,git revert
menambahkan komit untuk membatalkan perubahan.sumber
git reset
tidak hanya memodifikasi komit yang ditunjuk cabang , itu juga digunakan untuk menghapus file dari indeks, dan dapat memodifikasi copy pekerjaan dengangit reset --mixed
(default).Reset - Pada level komit, pengaturan ulang adalah cara untuk memindahkan ujung cabang ke komit yang berbeda. Ini dapat digunakan untuk menghapus komit dari cabang saat ini.
Kembalikan - Mengembalikan Membatalkan komit dengan membuat komit baru. Ini adalah cara yang aman untuk membatalkan perubahan, karena tidak memiliki kesempatan untuk menulis ulang riwayat komit. Bandingkan ini dengan git reset, yang mengubah riwayat komit yang ada. Untuk alasan ini, git revert harus digunakan untuk membatalkan perubahan pada cabang publik, dan git reset harus dicadangkan untuk membatalkan perubahan pada cabang pribadi.
Anda dapat melihat tautan ini - Reset, Checkout, dan Kembalikan
sumber
Jika Anda melanggar pohon tetapi tidak melakukan kode, Anda dapat menggunakan
git reset
, dan jika Anda hanya ingin mengembalikan satu file, Anda dapat menggunakangit checkout
.Jika Anda memecahkan pohon dan melakukan kode, Anda dapat menggunakan
git revert HEAD
.http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html
sumber