Ada sejumlah jawaban di sini dengan kesalahpahaman tentang git reset --soft
. Meskipun ada kondisi khusus di mana git reset --soft
hanya akan berubah HEAD
(mulai dari keadaan kepala terpisah), biasanya (dan untuk penggunaan yang dimaksudkan), itu memindahkan referensi cabang yang saat ini Anda periksa. Tentu saja tidak dapat melakukan ini jika Anda tidak memiliki cabang diperiksa (maka kondisi khusus di mana git reset --soft
hanya akan berubah HEAD
).
Saya menemukan ini sebagai cara terbaik untuk dipikirkan git reset
. Anda tidak hanya bergerak HEAD
( semuanya melakukan itu ), Anda juga memindahkan ref cabang , misalnya master
,. Ini mirip dengan apa yang terjadi ketika Anda menjalankan git commit
(cabang saat ini bergerak bersama HEAD
), kecuali alih-alih membuat (dan pindah ke) komit baru , Anda pindah ke komit sebelumnya .
Inilah intinya reset
, mengubah cabang menjadi sesuatu selain dari komit baru, bukan berubah HEAD
. Anda dapat melihat ini dalam contoh dokumentasi:
Batalkan komit, menjadikannya cabang topik
$ git branch topic/wip (1)
$ git reset --hard HEAD~3 (2)
$ git checkout topic/wip (3)
- Anda telah membuat beberapa komitmen, tetapi sadarilah bahwa itu terlalu dini untuk berada di cabang "tuan". Anda ingin terus memoles mereka di cabang topik, jadi buatlah cabang "topik / penghapusan" dari HEAD saat ini.
- Putar ulang cabang master untuk menyingkirkan ketiga komitmen tersebut.
- Beralih ke cabang "topic / wip" dan tetap bekerja.
Apa gunanya rangkaian perintah ini? Anda ingin memindahkan cabang , di sinimaster
, jadi saat Anda master
check out, Anda larigit reset
.
Jawaban pilihan teratas di sini umumnya baik, tetapi saya pikir saya akan menambahkan ini untuk memperbaiki beberapa jawaban dengan kesalahpahaman.
Ubah cabang Anda
git reset --soft <ref>
: mengatur ulang penunjuk cabang untuk cabang yang saat ini diperiksa ke komit pada referensi yang ditentukan <ref>
,. File dalam direktori dan indeks kerja Anda tidak berubah. Berkomitmen dari tahap ini akan membawa Anda kembali ke tempat Anda sebelumnyagit reset
perintah.
Ubah indeks Anda juga
git reset --mixed <ref>
atau setara
git reset <ref>
:
Apakah yang --soft
dilakukan DAN juga mengatur ulang indeks agar sesuai dengan komit pada referensi yang ditentukan. Sementara git reset --soft HEAD
tidak melakukan apa-apa (karena dikatakan memindahkan cabang yang diperiksa ke cabang yang diperiksa) git reset --mixed HEAD
,, atau yang setaragit reset HEAD
, adalah perintah yang umum dan berguna karena mengatur ulang indeks ke keadaan komit terakhir Anda.
Ubah direktori kerja Anda juga
git reset --hard <ref>
: melakukan apa yang --mixed
dilakukan DAN juga menimpa direktori kerja Anda. Perintah ini mirip dengan git checkout <ref>
, kecuali bahwa (dan ini adalah poin penting tentang reset
) semua bentuk git reset
gerakan yang HEAD
ditunjuk oleh ref cabang .
Catatan tentang "perintah ini dan itu menggerakkan HEAD":
Tidak berguna untuk mengatakan perintah memindahkan file HEAD
. Perintah apa pun yang mengubah posisi Anda di riwayat komit Anda akan memindahkan perintah HEAD
. Itulah yang HEAD
adalah , pointer ke mana pun Anda berada. HEAD
adalah Anda , dan akan bergerak kapan pun Anda melakukannya.