Apa perbedaan antara "git reset" dan "git checkout"?

Saya selalu menganggap git reset dan git checkout sebagai hal yang sama, dalam arti bahwa keduanya mengembalikan proyek ke perbaikan tertentu. Namun, saya merasa bahwa mereka tidak bisa persis sama seperti itu akan berlebihan. Apa perbedaan yang sebenarnya antara keduanya? Saya agak bingung karena svn memiliki svn co untuk kembali ke perbaikan.

TAMBAH

Diagram berikut menjelaskan perbedaannya, walaupun dalam kasus mungkin terlalu disederhanakan atau tidak benar. Apa yang kamu pikirkan Apakah itu salah atau terlalu disederhanakan?

2019

316
03 сент. mengatur prosseek 03 sept. 2010-09-03 23:21 '10 pada 23:21 2010-09-03 23:21
@ 5 balasan
  • git reset hanyalah tentang memperbarui indeks , memindahkan HEAD.
  • git checkout adalah pembaruan dari pohon yang berfungsi (untuk indeks atau pohon yang ditentukan). Ini akan memperbarui KEPALA hanya jika Anda memeriksa cabang (jika tidak, Anda akan menerima KEPALA khusus ).

Sebagai perbandingan, karena svn tidak memiliki indeks, hanya pohon svn checkout diproses menyalin revisi ini ke direktori terpisah. <ш> Setara terdekat untuk git checkout :

  • svn update (jika Anda berada di cabang yang sama, yang berarti URL SVN yang sama)
  • svn switch (jika Anda memesan instance dari satu cabang, tetapi dari URL repositori SVN lainnya)

Ketiga perubahan pada pohon kerja ( svn checkout , update , switch ) hanya memiliki satu perintah di git: git checkout .
Tetapi karena git juga memiliki konsep indeks ("area pementasan" antara repo dan pohon yang bekerja), Anda juga memiliki git reset .


Thinkeye menyebutkan Reset Demystified dalam komentar . "

Sebagai contoh, jika kita memiliki dua cabang: " master " dan " develop ", menunjuk ke komitmen yang berbeda, dan sekarang kita berada di " develop " (oleh karena itu KEPALA menunjuk ke sana), dan kita menjalankan git reset master , ' develop ' sekarang akan menunjuk ke pesan yang sama dengan ' master '.

Di sisi lain, jika sebaliknya kita menjalankan git checkout master , develop tidak akan bergerak, HEAD . HEAD sekarang akan menunjuk ke ' master '.

Jadi dalam kedua kasus, kami menggerakkan HEAD untuk menunjukkan komit A , tetapi cara kami melakukannya sangat berbeda. reset memindahkan cabang HEAD ke titik, memindahkan HEAD ke titik ke cabang lain.

2019

134
03 сент. jawabannya diberikan VonC 03 September. 2010-09-03 23:29 '10 pada 23:29 2010-09-03 23:29

Dalam bentuk yang paling sederhana, reset me-reset indeks tanpa menyentuh pohon yang bekerja, dan checkout mengubah pohon yang bekerja tanpa menyentuh indeks.

Atur u>HEAD , pohon pemrosesan tetap diam:

 git reset 

Secara konseptual, ini memeriksa indeks di pohon kerja. Untuk membuatnya benar-benar melakukan sesuatu, Anda harus menggunakan -f untuk membuatnya menimpa setiap perubahan lokal. Ini adalah fungsi keamanan untuk memastikan bahwa bentuk "tidak ada argumen" tidak merusak:

 git checkout 

Segera setelah Anda mulai menambahkan parameter, memang benar bahwa ada beberapa tumpang tindih.

checkout biasanya digunakan dengan cabang, tag atau komit. Dalam hal ini, ini akan mengatur u>HEAD dan indeks untuk komit yang diberikan, serta melakukan pemeriksaan indeks di pohon kerja.

Selain itu, jika Anda mengirim --hard untuk reset , Anda dapat meminta reset menimpa pohon kerja, serta mengatur u>

Jika saat ini Anda memiliki cabang yang terdaftar, ada nilai kunci antara reset dan checkout ketika memasok cabang alternatif atau komit. reset akan mengubah cabang saat ini ke titik di komit yang dipilih, sedangkan checkout hanya menyisakan cabang saat ini, tetapi akan memeriksa cabang yang dikirim atau sebagai gantinya.

Bentuk reset dan commit termasuk jalur pengiriman.

Jika Anda mengirim jalur untuk reset , Anda tidak dapat mengatur --hard , dan reset hanya akan mengubah versi indeks dari jalur yang disediakan untuk versi dalam komit yang disediakan (atau HEAD , jika Anda tidak menentukan komit).

Jika Anda mengirim jalur checkout , seperti reset , ini memperbarui versi indeks dari jalur yang disediakan sesuai dengan komit (atau HEAD ) yang diberikan, tetapi akan selalu memeriksa versi indeks dari jalur yang ditentukan di pohon kerja.

53
03 сент. Balas diberikan oleh Charles Bailey 03 Sep. 2010-09-03 23:43 '10 pada 23:43 2010-09-03 23:43

Satu kasus penggunaan sederhana saat mengembalikan perubahan:
1. Gunakan reset jika Anda ingin membatalkan instalasi file yang dimodifikasi.
2. Gunakan checkout jika Anda ingin membatalkan perubahan pada file yang dihapus / s.

8
28 янв. Balas diberikan oleh John Doe 28 Jan 2016-01-28 05:54 '16 pada 5:54 2016-01-28 05:54

Atlassian memberi kita penjelasan yang bagus tentang git reset, git checkout, dan karenanya git kembali. Artikel ini menjelaskan berbagai aplikasi dari perintah-perintah ini pada level yang berbeda - file, snapshot yang disampaikan, dan komit.

https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting

5
21 марта '15 в 18:55 2015-03-21 18:55 jawabannya diberikan Rochadsouza 21 Maret, '15 pukul 18:55 2015-03-21 18:55

Dua perintah (reset dan checkout) sangat berbeda.

checkout X JANGAN reset --hard X

Jika X adalah nama cabang, checkout X akan mengubah cabang saat ini dan reset --hard X tidak.

3
11 сент. jawabannya diberikan wiki1000 11 Sep 2015-09-11 19:01 '15 pada 19:01 2015-09-11 19:01

Pertanyaan lain tentang tag atau Ajukan Pertanyaan