ความหมายของการรีเซ็ต git คืออะไร --hard origin / master?


224

ฉันทำgit pullและได้รับข้อผิดพลาด:

ไฟล์แผนผังการทำงานต่อไปนี้จะถูกเขียนทับโดยการรวม ... โปรดย้ายหรือลบออกก่อนที่จะทำการผสาน

เพื่อแก้ไขปัญหานี้ฉันทำสิ่งต่อไปนี้:

git fetch
git reset --hard origin/master

ตอนนี้เมื่อฉันทำgit pullมันบอกทุกอย่างที่ทันสมัย ฉันต้องการรู้ว่าจะเกิดอะไรขึ้นเมื่อฉันเรียกใช้คำสั่งเหล่านี้ ฉันรู้ว่าgit fetchดึงการเปลี่ยนแปลงจาก repo ระยะไกลโดยไม่รวมเข้ากับ repo ในพื้นที่ของฉัน

ความหมายของgit reset --hard origin/masterอะไร มันทำงานยังไง?

คำตอบ:


416
git reset --hard origin/master

พูดว่า: ทิ้งการเปลี่ยนแปลงที่ไม่มีการแบ่งระยะของฉันและลืมทุกอย่างในสาขาท้องถิ่นปัจจุบันของฉันและทำให้มันเหมือนกันorigin/masterทุกประการ

คุณอาจต้องการถามเรื่องนี้ก่อนที่คุณจะรันคำสั่ง ลักษณะการทำลายล้างมีการบอกใบ้โดยใช้คำเดียวกันกับใน "การรีเซ็ตอย่างหนัก"


9
git reset --hard HEAD@{1}คุณสามารถยกเลิกการย้ายครั้งนี้โดยใช้ HEAD@{1}แตกต่างกันไปตามสถานการณ์ดังนั้นคุณควรค้นหาgit reflogด้วยตนเอง
Nils Werner

2
โปรดทราบว่าวิธีการ @ NilsWerner สำหรับการเลิกทำการย้ายไม่ได้เรียกคืนการเปลี่ยนแปลงแบบ staged และ unstaged สิ่งเหล่านั้นหายไปเพื่อความดี
Michael Anderson

3
ไฟล์ที่จัดฉากยังสามารถพบได้git fsck --lost-foundแต่จะไม่ถูกแนบกับพา ธ ไฟล์ดั้งเดิมและอาจยากต่อการจัดเรียง
CB Bailey

1
บ่อยครั้งที่มีประโยชน์ในการรีเซ็ตสาขาหลักในพื้นที่ของคุณให้เป็นจุดเริ่มต้น / ต้นแบบเมื่อคุณมีการเปลี่ยนแปลงที่มุ่งมั่นเป็นหลักในท้องถิ่นของคุณแทนที่จะเป็นสาขาท้องถิ่น เพียงแค่สร้างสาขาท้องถิ่นสำหรับการกระทำล่าสุดของคุณจากนั้นรีเซ็ตต้นแบบท้องถิ่นของคุณเป็นที่มา / ต้นแบบ จากนั้นคุณสามารถผสานหรือรีบูตสาขาของคุณจากต้นแบบได้ตามต้องการ
Mike Hopper

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