กำลังดำเนินการ rebase ไม่สามารถคอมมิต จะดำเนินการหรือหยุด (ยกเลิก) อย่างไร?


140

เมื่อฉันวิ่ง:

git status

ฉันเห็นสิ่งนี้:

rebase in progress; onto 9c168a5
You are currently rebasing branch 'master' on '9c168a5'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working directory clean

เมื่อฉันทำ:

ls `git rev-parse --git-dir` | grep rebase || echo no rebase

ฉันเห็น: rebase-apply

ฉันไม่สามารถยอมรับที่มา

git branch

แสดงให้เห็นว่า:

* (no branch, rebasing master)
  develop
  master

ผมติดอยู่. ผมไม่ทราบว่าจะทำอย่างไร? ใช้เวลานานขนาดนี้ในการปรับฐานใหม่หรือไม่? git rebase --continueไม่ทำอะไรเลย ฉันไม่มีอะไรอยู่ในสถานะคอมไพล์ .. ฉันแค่รอ rebase ฉันจะทำอะไรได้บ้าง?

UDATE: นี่คือผลลัพธ์ของ: git rebase --continue

Applying: no message
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

คอมไพล์เพิ่ม ไม่มีอะไรเลย

คำตอบ:


257

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

ตามข้อความแสดงข้อผิดพลาดจากคำgit rebase --continueแนะนำคุณขอให้คอมไพล์ใช้แพตช์ที่ส่งผลให้แพตช์ว่างเปล่า git rebase --skipส่วนใหญ่มีแนวโน้มที่นี้หมายถึงแพทช์ถูกนำไปใช้แล้วและคุณต้องการที่จะลดลงได้โดยใช้


ฉันอัปเดตโพสต์เพื่อรวม git rebase - ดำเนินการต่อตามคำขอของคุณ
Joseph Chambers

2
ตกลงแล้ว "it rebase --continue ไม่ทำอะไร" นั้นไม่ถูกต้อง คุณควรเขียน "git rebase --continue error out ดังนี้ ... " เพื่อรับความช่วยเหลือ
Matthieu Moy

3
เอกสารของเรื่องนี้แย่มากมันยังคงทำซ้ำว่าคุณ 'git rebase - ต่อไป' และคุณจะจบลงด้วยวิธีที่ไม่สิ้นสุดในการพูดแบบนั้น
Jean-Paul

6
git rebase - ข้ามได้!
Borzh

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

11

ฉันติดอยู่ใน 'สถานะ rebase' ฉันเข้าใจแล้ว

On branch master
Your branch is up to date with 'origin/master'.

You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

แต่ทำงานได้ผลgit rebase --skiperror: could not read '.git/rebase-apply/head-name': No such file or directory

วิ่งrm -fr ".git/rebase-apply"ช่วย

หมายเหตุ: แน่นอนให้ทำก็ต่อเมื่อคุณไม่สนใจ rebase หรือหากคุณติดอยู่กับฐานข้อมูลเดิมที่คุณไม่ต้องการอีกต่อไป


9
  • ขั้นตอนที่ 1: ทำต่อไป git rebase --continue

  • ขั้นตอนที่ 2: แก้ไขข้อขัดแย้งแล้ว git add .

  • กลับไปที่ขั้นตอนที่ 1 ตอนนี้ถ้ามันบอกว่าให้no changes ..เรียกใช้git rebase --skipจากนั้นกลับไปที่ขั้นตอนที่ 1

  • หากคุณแค่ต้องการออกจากการทำงานของ rebase git rebase --abort

  • เมื่อทำการเปลี่ยนแปลงทั้งหมดเสร็จสิ้นgit commit -m "rebase complete"และคุณทำเสร็จแล้ว


--continueไม่ได้ทำงานก็บอกผมว่าไม่มีอะไรเปลี่ยนแปลง ... เมื่อฉันได้แต่ผมจะทำได้เพียงแค่--skip pushฉันไม่เข้าใจสิ่งนั้น มันเหมือนกับว่าทุกครั้งที่ฉันทำอะไรสุ่ม ๆ จนได้ผล
Alexis Wilke

6

คุณบอกที่เก็บของคุณให้ rebase ดูเหมือนว่าคุณจะอยู่บนกระทำ (ระบุ SHA 9c168a5) และจากนั้นได้หรือgit rebase mastergit pull --rebase master

คุณกำลังปรับเปลี่ยนสาขาหลักในการคอมมิตนั้น คุณสามารถสิ้นสุด rebase ผ่านทางgit rebase --abort. สิ่งนี้จะทำให้คุณกลับมาอยู่ในสถานะเดิมก่อนที่คุณจะเริ่มทำการรีเบตใหม่


ฉันไม่เคยทำgit rebase/pull --rebase master. ฉันมักจะจบลงในสถานะนี้ ... เพราะความขัดแย้ง ฉันเปลี่ยนไฟล์ทำการดึงเรียกคืนการเปลี่ยนแปลงของฉันและแพตช์ใหม่ว่างเปล่าซึ่งทำให้สมองของคอมไพล์เสียหายซึ่งตัดสินใจเข้าสู่ "โหมด rebase" นี้ ...
Alexis Wilke

6

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

$ git rebase --continue
Applying: <commit message>
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

$ git status
rebase in progress; onto 4df0775
You are currently rebasing branch '<local-branch-name>' on '4df0775'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working directory clean

นอกจาก--abort(+1) แล้วตอนนี้คุณมี--quit( stackoverflow.com/a/41363262/6309 )
VonC

หลังจากแก้ไขข้อขัดแย้ง จากนั้นเรียกคอมมิตคอมมิต ทำงานอื่นแล้วโทรคอมคอมมิตอีกครั้ง หากใช้วิธีนี้ git rebase --abort งานทั้งหมดที่คุณกำลังทำหลังจากกระทำความขัดแย้งจะหายไป ดังนั้นระวัง
จิน

3

หากgit rebase --abortไม่ได้ผลและคุณยังคงได้รับ

ข้อผิดพลาด: ไม่สามารถอ่าน '.git / rebase-apply / head-name': ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว

ประเภท:

git rebase --quit

0

ฉันตั้งค่าgitเป็นautorebaseบนไฟล์git checkout

# in my ~/.gitconfig file
[branch]
    autosetupmerge = always
    autosetuprebase = always

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

อย่างไรก็ตามสิ่งนี้มีผลข้างเคียงเมื่อฉันเปลี่ยนไปใช้สาขาและจากนั้นgit cherry-pick <commit-id>ฉันก็ตกอยู่ในสถานะแปลก ๆทุกครั้งที่มีความขัดแย้ง

ฉันต้องยกเลิกrebaseแต่ก่อนอื่นฉันแก้ไขข้อขัดแย้งgit add /path/to/fileไฟล์ (อีกวิธีที่แปลกมากในการแก้ไขความขัดแย้งในกรณีนี้!) จากนั้นทำไฟล์git commit -i /path/to/file. ตอนนี้ฉันสามารถยกเลิกrebase:

git checkout <other-branch>
git cherry-pick <commit-id>
...edit-conflict(s)...
git add path/to/file
git commit -i path/to/file
git rebase --abort
git commit .
git push --force origin <other-branch>

ประการที่สองgit commit .ดูเหมือนจะมาจากการทำแท้ง ฉันจะแก้ไขคำตอบหากพบว่าควรยกเลิกrebaseเร็วกว่านี้

--forceในการผลักดันจำเป็นต้องใช้ถ้าคุณข้ามกระทำอื่น ๆ และทั้งสองสาขาจะไม่เรียบ (ทั้งที่ขาดหายไปกระทำจากที่อื่น ๆ )


“ มิฉะนั้นมันจะรวมโดยอัตโนมัติเมื่อคุณสลับไปมาระหว่างสาขา” - อืมไม่ Git ไม่ทำการผสานหรือปรับฐานข้อมูลใด ๆ เมื่อคุณเปลี่ยนสาขา autosetupmergeเกี่ยวข้องกับวิธีการgit pullกำหนดค่าสำหรับสาขาใหม่
Marnen Laibow-Koser

ในตอนนี้เมื่อฉันกำลังต่อสู้กับปัญหานั้นแน่นอนว่ามันมีการรวมโค้ดต่างๆเข้าด้วยกัน การตั้งค่าปัจจุบันของฉันดูเหมือนจะข้ามปัญหานั้นไป นอกจากนี้ยังมีปัญหาที่ไม่ได้ทำการคอมมิต + พุชสาขาปัจจุบันของคุณก่อนที่จะพยายามเปลี่ยน
Alexis Wilke

Git จะบอกคุณว่าการเปลี่ยนแปลงที่ไม่ได้ผูกมัดของคุณจะป้องกันการเปลี่ยนสาขาได้หรือไม่ดังนั้นจึงไม่ต้องกังวลมากนักใช่ไหม หรือคุณกำลังพูดถึงเรื่องอื่น?
Marnen Laibow-Koser

0

อีกทางเลือกหนึ่งในการABORT / SKIP / CONTINUEจากIDE

VCS> Git> ยกเลิกการทำซ้ำ

ป้อนคำอธิบายภาพที่นี่


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