ยกเลิก Git Stash Pop


133

ฉันทำ git stash pop และตอนนี้ฉันมีความขัดแย้งมากมาย ฉันได้ใส่รหัสล่าสุดทั้งหมดของฉันก่อนหน้าgit stash popดังนั้นจะมีวิธีกลับไปที่การกระทำสุดท้ายและกำจัดข้อขัดแย้งทั้งหมดและรหัสที่git stash popฉีดเข้าไปหรือไม่


คุณยังต้องการบันทึกงานที่โผล่ออกมาหรือไม่หรือคุณไม่ต้องการดูอีกเลย
jscs

1
ไม่ฉันไม่ต้องการงาน Popped ฉันซ่อนไว้เหมือน 4 เดือนที่แล้วและไม่แน่ใจว่ามีอะไรอยู่ในนั้น?
jdog

2
คุณสนใจสิ่งที่ไม่ได้ผูกมัดก่อนที่จะซ่อนหรือไม่?
Andrew Marshall

4 เดือนที่แล้วหรือวันนี้? ฉันต้องการสิ่งที่ฉันมีเมื่อชั่วโมงก่อน
jdog

5
หากมีข้อขัดแย้งเมื่อคุณgit stashคอมไพล์จะไม่ทิ้งที่ซ่อนจากรายการ ดังนั้นgit reset --hard HEADไม่ทำลายงานที่โผล่ออกมา
jwadsack

คำตอบ:


189

สิ่งนี้ถูกถามและตอบใน stackoverflow แล้ว (ดูวิธีเปลี่ยนที่เก็บ Git กลับเป็นคอมมิตก่อนหน้านี้? ) แต่คำตอบง่ายๆคือ:

git reset --hard HEAD

สิ่งนี้ควรดูแลปัญหาของคุณ โปรดสังเกตว่าสิ่งนี้จะลบการเปลี่ยนแปลงที่ไม่ได้กำหนดไว้ทั้งหมดออกจากที่เก็บ

โปรดทราบว่าหากมีข้อขัดแย้งระบบจะเก็บที่ซ่อนไว้ จากเอกสารที่เก็บไว้ :

การใช้รัฐอาจล้มเหลวด้วยความขัดแย้ง ในกรณีนี้จะไม่ถูกลบออกจากรายการที่เก็บ คุณต้องแก้ไขข้อขัดแย้งgit stash dropด้วยตนเองและโทรติดต่อด้วยตนเองในภายหลัง


1
การดำเนินการนี้จะเปลี่ยน repo ในพื้นที่ของคุณกลับเป็นการกระทำครั้งสุดท้าย คุณควรจะสามารถผลักดันการกระทำทั้งหมดของคุณ (ตั้งแต่การผลักดันครั้งล่าสุด) โดยไม่มีปัญหา หากไม่ได้ผลให้โพสต์ผลลัพธ์กลับไปที่คำถามก่อนหน้าของคุณ) โชคดี.
MichaelMilom

28
แต่สิ่งนี้จะทำให้ที่เก็บของคุณหายไป
K. Weber

19
@ K. Weber หากgit stash popทำให้เกิดความขัดแย้งการซ่อนจะไม่ถูกลบออกจากรายการที่เก็บ
Daiwei

1
ฉันไม่แน่ใจว่าใครโหวตให้ 'คุณจะไม่เสียที่ซ่อนของคุณ' ฉันเพิ่งสูญเสียของฉันไป
Anthony

4
มีวิธีแก้ปัญหาไม่มากนักเนื่องจากชี้ให้เห็นว่าคุณจะสูญเสียการเปลี่ยนแปลงที่ไม่ได้รับการแนะนำ
Ivan P

4

รีเซ็ตยังสามารถเรียกใช้ในไฟล์เฉพาะ:

git reset HEAD <filename>...

คุณไม่สามารถฮาร์ดรีเซ็ตไฟล์ได้ แต่คุณสามารถยกเลิกการเปลี่ยนแปลงได้ด้วยการชำระเงินในภายหลัง:

git checkout -- <filename>...

ที่เก็บของคุณจะถูกเก็บรักษาไว้ตามที่ลุคชี้ไว้ในคำตอบของ MichaelMilom

สิ่งนี้มีประโยชน์เมื่อคุณไม่ต้องการสูญเสียการเปลี่ยนแปลงในเครื่องที่ยังไม่ได้ผูกมัด


0

หากคุณไม่ต้องการเห็นผลงานใน popped stash อีกครั้งทำได้ง่ายๆเพียงแค่ฮาร์ดรีเซ็ต:

git reset --hard HEAD

สิ่งนี้บอกให้คอมไพล์ละเว้นข้อเท็จจริงที่ว่าคุณมีการเปลี่ยนแปลงที่ไม่ได้กำหนดไว้ในไดเร็กทอรีการทำงานของคุณและตั้งค่าไดเร็กทอรีการทำงานพื้นที่การจัดเตรียมและมุ่งหน้าไปที่การคอมมิตที่คุณระบุ - ในกรณีนี้คือ HEAD ที่มีอยู่ซึ่งมีงานทั้งหมดของคุณ เพิ่งมุ่งมั่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.