วิธียกเลิกการดึงคอมไพล์?


238

ฉันต้องการยกเลิกการคอมไพล์ของฉันเนื่องจากบัญชีที่ไม่ต้องการในแหล่งกำเนิดระยะไกล แต่ฉันไม่ทราบว่าต้องแก้ไขการตั้งค่าใดกลับไป

ฉันจะกลับไปที่สถานะก่อนที่จะดึงคอมไพล์บนแหล่งกำเนิดระยะไกลได้อย่างไร


4
คำแนะนำด้านข้าง: คุณอาจพบว่ามีประโยชน์ในgit fetch upstreamตอนแรกจากนั้นดูอย่างรวดเร็วgit diff upstream/branchเพื่อดูว่าคุณจะผสานอะไรเข้าด้วยกันถ้าทุกอย่างเรียบร้อยแล้วให้ดำเนินการต่อไปgit merge upstream/branch
Shahbaz

1
คุณจะสูญเสียเครดิตสตรีททั้งหมดของคุณและได้รับการจ่ายเงินเป็นรายสัปดาห์หากผู้ส่งจดหมายข่าวรายใหญ่เห็นว่าคุณทำคำสั่งgitจาก GUI แต่GitHub DesktopและAtomทั้งคู่มีปุ่มที่ปลอดภัยตรงไปตรงมาเพื่อundoยืนยันและช่องทำเครื่องหมาย GUI ก็เป็นคนเช่นกัน!
Dem Pilafian

คำตอบ:


391

หรือเพื่อให้ชัดเจนยิ่งขึ้นกว่าคำตอบอื่น ๆ :

git pull 

ขออภัย?

git reset --keep HEAD@{1}

รุ่นคอมไพล์เก่ากว่า 1.7.1 --keepไม่ได้ หากคุณใช้เวอร์ชันดังกล่าวคุณสามารถใช้--hard- แต่นั่นเป็นการดำเนินการที่เป็นอันตรายเพราะสูญเสียการเปลี่ยนแปลงในท้องถิ่น


ถึงผู้แสดงความคิดเห็น

ORIG_HEAD เป็นสถานะก่อนหน้าของ HEAD ซึ่งกำหนดโดยคำสั่งที่อาจมีพฤติกรรมที่เป็นอันตรายและง่ายต่อการเปลี่ยนกลับ ขณะนี้มีประโยชน์น้อยลงเมื่อ Git มีการอ้างอิง: HEAD @ {1} เทียบเท่ากับ ORIG_HEAD (HEAD @ {1} เป็นค่าสุดท้ายของ HEAD เสมอ ORIG_HEAD เป็นค่าสุดท้ายของ HEAD ก่อนการดำเนินการที่เป็นอันตราย)


2
อะไรคือความแตกต่างระหว่าง HEAD @ {1} และ HEAD ^
hugemeow

7
@hugemeow นั่นจะเป็นคำถาม SO ที่ดี ในขณะเดียวกันก็man git-rev-parseอธิบายเรื่องนี้ HEAD@{1}เป็นค่าก่อนหน้าของสัญลักษณ์HEADในreflogขณะที่HEAD^เป็น (ตอนแรก) การแก้ไขผู้ปกครองHEADในปัจจุบัน ทั้งสองจำเป็นต้องพยักหน้าเท่ากัน (เช่นหลังจากรีบูต, ฮาร์ดรีเซ็ต, สวิตช์สาขาและสิ่งต่าง ๆ ) อ่านบทความที่เชื่อมโยงเพื่ออ้างอิง ไชโย
sehe

10
ผู้ใช้ PowerShell หนีวงเล็บด้วย backtick:git reset HEAD@`{1`}
Robert Claypool

3
ss64.com/ps/syntax-esc.htmlฉันคิดว่าคุณอยากจะพิมพ์HEAD@`{1`}หรือว่าไม่ทำในสิ่งที่ทำงานบนเปลือกหอย POSIX เกินไป:'HEAD@{1}'
sehe

2
ฉันคิดว่ามันไม่เพียง แต่รีเซ็ตการดึงเท่านั้น แต่ยังรวมถึงการกระทำของฉัน = (
falsarella

67

git reflog showควรแสดงประวัติความเป็นมาของหัวหน้า pullคุณสามารถใช้ที่จะคิดออกว่าคุณอยู่ที่ไหนก่อน จากนั้นคุณสามารถresetของคุณHEADในการที่กระทำ


git reflog show ให้ผลลัพธ์นี้: c9e5e4d HEAD @ {0}: pull: กรอไปข้างหน้า 1c86a22 HEAD @ {1}: หลักต้นกำเนิดดึง: กรอไปข้างหน้า 05c141a HEAD @ {2}: pull: กรอไปข้างหน้าฉันสามารถรีเซ็ต HEAD ไปที่ HEAD ได้อย่างปลอดภัย @ {1}
Kartins

คำตอบอื่น ๆ โดย sehe มีรายละเอียดเกี่ยวกับการเดินทาง
Noufal Ibrahim

นี่เป็นประโยชน์อย่างยิ่งหลังจากเกิดความหายนะที่เกิดขึ้นอย่างต่อเนื่องผสานผสานเข้ากับประวัติศาสตร์ของฉัน พาพวกเขาออกไปโดยมองหาสิ่งที่เป็นที่รู้จักในการอ้างอิงจากนั้นจึงผลักดัน
Domenic

ถ้าpullเป็นการกระทำแรกคืออะไร? ถ้าpullอยู่ที่HEAD@{1}และไม่มีอะไรอื่นก่อนหน้านั้นคุณจะกลับสู่สถานะก่อนหน้าได้อย่างไร
Hendra Uzia

สร้างที่เก็บใหม่ไหม
Noufal Ibrahim

29

สิ่งนี้ใช้ได้สำหรับฉัน

git reset --hard ORIG_HEAD 

เลิกทำการผสานหรือดึง:

$ git pull                         (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 (2)
$ git pull . topic/branch          (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       (4)

ชำระเงินนี้: HEAD และ ORIG_HEAD ใน Gitสำหรับข้อมูลเพิ่มเติม


17

ค้นหาสิ่ง<SHA#>ที่คุณต้องการทำ คุณสามารถค้นหาได้ใน GitHub หรือโดยการพิมพ์git logหรือgit reflog showที่บรรทัดคำสั่งแล้วทำ git reset --hard <SHA#>


ค้นหาสิ่งที่กระทำหรือไม่
มาร์ติน

ขออภัยฉันได้รับการแก้ไข<SHA#>
Nina

นี่คือคำสั่งที่ฉันใช้บ่อยที่สุดเมื่อฉันต้องเลิกทำบางอย่าง
Kartins

2

จากhttps://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree

เลิกทำการผสานหรือดึงเข้าไปในแผนผังการทำงานที่สกปรก

$ git pull           (1)
Auto-merging nitfol
Merge made by recursive.
 nitfol               |   20 +++++----
 ...
$ git reset --merge ORIG_HEAD      (2)

แม้ว่าคุณอาจมีการดัดแปลงในแผนผังการทำงานของคุณคุณสามารถพูดได้อย่างปลอดภัยgit pullเมื่อคุณรู้ว่าการเปลี่ยนแปลงในสาขาอื่นไม่ทับซ้อนกับพวกเขา

หลังจากตรวจสอบผลลัพธ์ของการผสานคุณอาจพบว่าการเปลี่ยนแปลงในสาขาอื่นไม่เป็นที่น่าพอใจ การวิ่งgit reset --hard ORIG_HEAD จะช่วยให้คุณย้อนกลับไปยังที่ที่คุณอยู่ แต่จะยกเลิกการเปลี่ยนแปลงในพื้นที่ที่คุณไม่ต้องการ git reset --mergeเก็บการเปลี่ยนแปลงในท้องถิ่นของคุณ

ดูเพิ่มเติมที่https://stackoverflow.com/a/30345382/621690


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