ยกเลิกการยกเลิกทั้งหมด


255

ฉันทำการ rebase ดังนี้:

git rebase --onto master new_background_processing export_background_processing

ไม่ได้ทำตามที่ฉันต้องการดังนั้นฉันจึงทำการรีเซ็ต:

git reset --hard HEAD@{1}

ฉันได้สาขากลับคืนสู่สถานะเดิม แต่ฉันได้รับข้อความนี้เมื่อฉันพิมพ์สถานะ git:

# You are currently rebasing branch 'export_background_processing' on 'e378641'.

ฉันจะยกเลิกการคืนเงินที่สมบูรณ์ได้อย่างไร ไม่แน่ใจว่านั่นหมายถึงอะไร


16
git rebase --abort
Micha Wiedenmann

6
Git 2.12 git rebase --quitในขณะนี้ให้ ดูคำตอบของฉันด้านล่าง
VonC

คำตอบ:


407

git rebase --abortใช้ จากเอกสารเคอร์เนล Linux อย่างเป็นทางการสำหรับgit rebase :

git rebase --continue | --skip | --abort | --edit-todo

5
ในกรณีของฉันgit rebase --abortไม่ได้ทำงานเพราะฉันทำอะไรบางอย่างยุ่ง error: could not read '.git/rebase-apply/head-name': directory of file does not existฉันเท่านั้นที่มีข้อผิดพลาดต่อไปนี้: ซอลเบลgit rebase --quit โลว์อธิบายแก้ปัญหาของฉันได้
Kout

84

ในกรณีของการรีบูตที่ผ่านมาซึ่งคุณไม่ได้ยกเลิกอย่างถูกต้องตอนนี้คุณ (Git 2.12, Q1 2017) มี git rebase --quit

ดูกระทำ 9512177 (12 พฤศจิกายน 2016) โดยNguyễnTháiNgọc Duy (pclouds ) (ผสานโดยJunio ​​C Hamano - gitster-ในการกระทำ 06cd5a1 , 19 ธันวาคม 2559)

rebase: เพิ่ม--quitในการล้างข้อมูลการรีบูตปล่อยให้ทุกอย่างอื่นไม่มีใครแตะต้อง

มีโอกาสเมื่อคุณตัดสินใจที่จะยกเลิก rebase ในความคืบหน้าและย้ายไปทำอย่างอื่น แต่คุณลืมที่จะทำ " git rebase --abort" ครั้งแรก หรือการดำเนินการ rebase กำลังดำเนินไปเป็นเวลานานที่คุณลืมไป เมื่อถึงเวลาที่คุณรู้ว่า (เช่นโดยเริ่มต้นใหม่อีกครั้ง) มันสายเกินไปแล้วที่จะย้อนขั้นตอนของคุณ การแก้ปัญหาเป็นปกติ

rm -r .git/<some rebase dir>

และดำเนินชีวิตของคุณต่อไป
แต่อาจมีไดเรกทอรีที่แตกต่างกันสองไดเรกทอรี<some rebase dir>(และแน่นอนว่าต้องมีความรู้เกี่ยวกับวิธีการทำงานของการรีบูต) และส่วน " .git" อาจยาวกว่านี้มากถ้าคุณไม่ได้อยู่ที่ดีที่สุดหรือในเวิร์กทรีที่เชื่อมโยง และ " rm -r" เป็นสิ่งที่อันตรายอย่างยิ่งที่จะทำเช่น.gitนั้นความผิดพลาดในนั้นอาจทำลายฐานข้อมูลวัตถุหรือข้อมูลสำคัญอื่น ๆ

ระบุ " git rebase --quit" สำหรับกรณีการใช้งานนี้เลียนแบบอย่างที่เป็น " git cherry-pick --quit"


ก่อน Git 2.27 (Q2 2020) รายการบันทึกที่สร้างขึ้นโดย " git merge --autostash" เพื่อให้สถานะสกปรกเริ่มต้นถูกทิ้งโดยไม่ได้ตั้งใจเมื่อ " git rebase --quit" ซึ่งได้รับการแก้ไข

ดูกระทำ 9b2df3e (28 เมษายน 2020) โดยDenton หลิว (Denton-L )
(ผสานโดยJunio ​​C Hamano - gitster- in 3afdeef , 29 Apr 2020)

rebase: บันทึกรายการบันทึกอัตโนมัติลงstash reflogในเปิด--quit

ลงชื่อออกโดย: Denton Liu

ในa03b55530a ( " merge: สอนตัวเลือก --autostash" 2020/04/07, Git v2.27.0 - ผสานการระบุไว้ในชุด # 5 ) ซึ่งเป็นตัวเลือกที่ได้รับการแนะนำให้รู้จักกับ--autostashgit merge

(ดู " สามารถ" git pull"ซ่อนและซ่อนการเปลี่ยนแปลงที่ค้างอยู่โดยอัตโนมัติหรือไม่ ")

โดยเฉพาะอย่างยิ่งเมื่อgit merge --quitมีการเรียกใช้รายการบันทึกอัตโนมัติปรากฏขึ้นจะถูกบันทึกลงในการอ้างอิงที่เก็บ

สิ่งนี้ตรงกันข้ามกับพฤติกรรมปัจจุบันของgit rebase --quitที่การป้อนข้อมูลอัตโนมัตินั้นเพิ่งหลุดออกจากการมีอยู่จริง

ใช้พฤติกรรมของgit merge --quitในgit rebase --quitและบันทึกรายการ autostash ลงใน reflog ของที่เก็บข้อมูลแทนการลบทิ้ง


3
สิ่งนี้มีประโยชน์มากสำหรับการหลีกเลี่ยงผลข้างเคียงของการรีเซ็ตไดเรกทอรีการทำงานเมื่อมีการเปลี่ยนแปลงที่ด้านบนของ a git rebaseแทนการสูญเสียสิ่งที่ฉันทำ: P
Chimpanzee Warlike

12

คุณจะโชคดีที่คุณไม่สมบูรณ์ rebase git rebase --abortเพื่อให้คุณยังสามารถทำ หากคุณเสร็จสิ้นการรีบูต (มันเขียนประวัติศาสตร์ ) สิ่งต่าง ๆ จะมีความซับซ้อนมากขึ้น พิจารณาการติดแท็กเคล็ดลับของสาขาก่อนที่จะทำการดำเนินการที่อาจสร้างความเสียหาย (โดยเฉพาะการเขียนประวัติใหม่) เพื่อให้คุณสามารถย้อนกลับได้


8

หากคุณเป็น"การรีบูต" , "เริ่มรีบูตแล้ว"ซึ่งคุณต้องการยกเลิกเพียงแค่คอม(#)เม้นต์คอมมิททั้งหมดที่แสดงในเครื่องมือแก้ไขการรีบูต

ดังนั้นคุณจะได้รับข้อความบรรทัดคำสั่ง

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