Buang Git Stash Pop

133

Saya melakukan pop git simpanan dan sekarang saya memiliki banyak konflik. Saya telah melakukan semua kode saya baru-baru ini sebelum git stash pop, jadi apakah ada cara untuk kembali ke komit terakhir dan menyingkirkan semua konflik dan kode yang git stash popdisuntikkan?

jdog
sumber
Apakah Anda masih ingin karya yang muncul diselamatkan, atau Anda tidak ingin melihatnya lagi?
jscs
1
Tidak, saya tidak ingin pekerjaan muncul. Saya melakukan simpanan seperti 4 bulan lalu dan tidak yakin apa yang ada di sana?
jdog
2
Apakah Anda peduli tentang hal-hal yang tidak berkomitmen sebelum disimpan?
Andrew Marshall
Yang 4 bulan lalu atau yang hari ini? Saya ingin apa yang saya miliki satu jam yang lalu.
jdog
5
Jika ada konflik saat Anda git stashmaka git tidak akan menjatuhkan simpanan dari daftar. Jadi git reset --hard HEADtidak merusak karya yang muncul.
jwadsack

Jawaban:

189

Ini sudah ditanyakan dan dijawab di stackoverflow (lihat Bagaimana cara mengembalikan repositori Git ke komit sebelumnya? ), Tetapi jawaban sederhananya adalah:

git reset --hard HEAD

Ini harus mengatasi masalah Anda. Perhatikan bahwa ini menghapus semua perubahan yang tidak dikomit dari repositori.

Perhatikan bahwa jika ada konflik, simpanan akan dipertahankan. Dari dokumen simpanan :

Menerapkan negara dapat gagal dengan konflik; dalam hal ini, itu tidak dihapus dari daftar simpanan. Anda perlu menyelesaikan konflik dengan tangan dan menelepon git stash dropsecara manual sesudahnya.

MichaelMilom
sumber
1
Ini akan mengembalikan repo lokal Anda ke komit terakhir. Anda harus dapat mendorong semua komitmen Anda (sejak dorongan terakhir) tanpa masalah. Jika tidak berhasil, kembalikan hasilnya ke pertanyaan Anda sebelumnya). Semoga berhasil.
MichaelMilom
28
Tetapi ini akan membuat simpanan Anda hilang
K. Weber
19
@ K.Weber jika git stash popmengakibatkan konflik, simpanan tidak akan dihapus dari daftar simpanan.
Daiwei
1
Saya tidak yakin siapa yang menolak 'sebenarnya Anda tidak akan kehilangan simpanan Anda', saya baru saja kehilangan milik saya
Anthony
4
Tidak banyak solusi, karena ini menunjukkan bahwa Anda akan kehilangan perubahan yang tidak dikomit.
Ivan P
4

Reset juga dapat dipanggil pada file tertentu:

git reset HEAD <filename>...

Anda tidak dapat mengatur ulang file dengan susah payah. Tetapi Anda dapat mengembalikan perubahan dengan checkout setelahnya:

git checkout -- <filename>...

Anda simpanan akan dipertahankan, seperti yang ditunjukkan oleh Luke dalam jawaban MichaelMomom.

Ini berguna saat Anda tidak ingin kehilangan perubahan lokal yang tidak berkomitmen.

Poppolopoppo
sumber
0

Jika Anda tidak pernah ingin melihat pekerjaan dalam simpanan muncul, ini sesederhana hard reset:

git reset --hard HEAD

Ini memberitahu git untuk mengabaikan fakta bahwa Anda memiliki perubahan yang tidak terikat pada direktori kerja Anda, dan menetapkan direktori kerja, area pementasan, dan menuju komit yang Anda tentukan - dalam hal ini, KEPALA yang ada, yang berisi semua pekerjaan yang Anda lakukan baru saja berkomitmen.

jscs
sumber