Apa arti dari git reset --hard origin / master?

224

Saya melakukan git pulldan mendapat kesalahan:

File pohon kerja berikut akan ditimpa oleh gabungan ... Harap pindahkan atau hapus sebelum Anda dapat menggabungkan.

Untuk mengatasi ini saya lakukan hal berikut:

git fetch
git reset --hard origin/master

Sekarang ketika saya melakukannya git pull, ia mengatakan semuanya up to date. Saya ingin tahu apa yang sebenarnya terjadi ketika saya menjalankan perintah ini. Saya tahu git fetchmengambil perubahan dari repo jarak jauh tanpa menggabungkannya ke repo lokal saya.

Apa artinya git reset --hard origin/master? Bagaimana cara kerjanya?

Raza
sumber

Jawaban:

414
git reset --hard origin/master

mengatakan: buang semua perubahan bertahap dan tidak panggung saya, lupakan semuanya di cabang lokal saya saat ini dan buatlah persis sama dengan origin/master.

Anda mungkin ingin menanyakan ini sebelum menjalankan perintah. Sifat destruktif diisyaratkan dengan menggunakan kata-kata yang sama seperti pada "hard reset".

CB Bailey
sumber
9
Anda dapat membatalkan langkah ini dengan menggunakan git reset --hard HEAD@{1}. HEAD@{1}bervariasi dari satu situasi ke situasi sehingga Anda disarankan untuk mencarinya di git reflog.
Nils Werner
2
Perhatikan bahwa metode @ NilsWerner untuk membatalkan pemindahan tidak mengembalikan perubahan yang dipentaskan dan tidak dipentaskan. Itu hilang untuk selamanya.
Michael Anderson
3
File bertahap masih dapat ditemukan git fsck --lost-found, tetapi file tersebut tidak akan dilampirkan ke jalur file aslinya dan mungkin sulit untuk disortir.
CB Bailey
1
Seringkali berguna untuk mereset cabang master lokal Anda ke asal / master ketika Anda telah (mungkin tidak sengaja) melakukan perubahan pada master lokal Anda alih-alih cabang lokal. Cukup buat cabang lokal untuk komit terbaru Anda dan setel ulang master lokal Anda ke asal / master. Anda kemudian dapat menggabungkan atau rebase cabang Anda dari master sesuai kebutuhan.
Mike Hopper
2
lol "diisyaratkan" adalah cara yang bagus untuk menggambarkan ini, karena tidak ada yang jelas atau eksplisit
Ben Sandeen