Git - วิธีแก้ไข rebase เชิงโต้ตอบ“ เสียหาย”


184

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

ขณะนี้การลดระดับอินเตอร์แอกทีฟดูเหมือนจะ "ติดอยู่" Git แสดงสาขาปัจจุบันเป็น (| REBASE-m) ทุกคำสั่ง (cd .. , ls, git rebase ... ) ภายในที่เก็บของฉันมีข้อผิดพลาดดังต่อไปนี้:

cat: .git / rebase-merge / head-name: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

ต่อไปนี้เป็นวิธีการรีคอมไพล์ git - ดูเหมือน:

$ git rebase --abort
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/head-name: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/orig-head: No such file or directory
HEAD is now at 4c737fb Revert "Modified file names"
rm: cannot remove `c:/_work/project/src/git/.git/rebase-merge/done': Permission denied
rm: cannot remove directory `c:/_work/project/src/git/.git/rebase-merge': Directory
not empty
cat: .git/rebase-merge/head-name: No such file or directory

นี่คือผลลัพธ์ของ git rebase - ยุติ:

$ git rebase --continue
cat: c:/_work/project/src/git/.git/rebase-merge/prev_head: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/end: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/msgnum: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/onto: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
prev_head must be defined
cat: .git/rebase-merge/head-name: No such file or directory

ความคิดใด ๆ ฉันต้องการรีเซ็ตสถานการณ์กลับสู่สถานะเดิมก่อนที่ฉันจะเริ่มการดำเนินการรีบูตอย่างดี

นี่คือวิธีบันทึก git - เส้นแสดงสถานการณ์:

4c737fb Revert "Modified file names"
247ac02 Modified file names
33141e6 Message modifications
10a4a04 Modified db script

และนี่เป็นเรื่องปกติ

ฉันใช้ msysgit v1.7.0.2


60
git rebase --quitทำงานให้ฉัน
Juan Caicedo

คำตอบ:


160

ดูเหมือนว่า Git พยายามลบ.git/rebase-mergeไดเรกทอรี แต่ไม่สามารถลบออกได้อย่างสมบูรณ์ คุณลองคัดลอกโฟลเดอร์นั้นไปหรือไม่? และคัดลอก.git/rebase-applyโฟลเดอร์ออกหากยังมีอยู่


7
ขอบคุณสำหรับการชี้ให้เห็นว่า ฉันสามารถแก้ไขปัญหาของฉันได้เพียงแค่รีสตาร์ทคอมพิวเตอร์ ฉันไม่แน่ใจว่าเกิดอะไรขึ้นเพราะการเข้าถึงโฟลเดอร์. git \ rebase-merge ทุกครั้งทำให้เกิด "การเข้าถึงถูกปฏิเสธ" - ข้อผิดพลาด
Mikael Koskinen

20
Reboot ไม่ได้ทำงานสำหรับฉัน แต่git rebase --abort(จากstackoverflow.com/a/4757777/146044 ) ไม่ทำงาน
backus

3
เพียงแค่เริ่มต้นใหม่เปลือกคอมไพล์ (Windows) ทำงานให้ฉัน ( git rebase --abortไม่ได้ทำงาน)
mhand

4
คำเตือน ... ฉันมีการเปลี่ยนแปลงมูลค่า 4 ชั่วโมงในไดเรกทอรีการทำงานของฉันเมื่อฉันสังเกตเห็นข้อผิดพลาด rebase เสียหาย พยายามgit rebase --abortเช็ดการเปลี่ยนแปลงที่ไม่มีการเปลี่ยนแปลงของฉัน ... ข้อผิดพลาดก็หายไปแม้ว่า
George Ananda Eman

117
รีบูตเครื่องหรือgit rebase --abortยังคงให้ข้อผิดพลาด git rebase --quitทำงานให้ฉัน
Flávio Rodrigues

199

ฉันติดอยู่ในนี้ ฉันสร้างไฟล์ head-name จากนั้นฉันพบข้อผิดพลาดอื่นว่าไม่พบไฟล์ไปยังดังนั้นฉันจึงสร้างไฟล์นั้น จากนั้นฉันมีข้อผิดพลาดอื่นที่บอกว่าไม่สามารถอ่าน '.git / rebase-Apply / to': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

ดังนั้นฉันดูเอกสาร git สำหรับการรีบูทและพบคำสั่งอื่น:

git rebase --quit

สิ่งนี้ทำให้ฉันกลับไปที่สาขาโดยไม่มีการเปลี่ยนแปลงและฉันสามารถเริ่มต้นการคืนเงินของฉันได้อีกครั้งดีเหมือนใหม่


51
git rebase --quitคือมัน!
สตีเวนชอว์

5
--quitทำงาน --abortไม่ได้เนื่องจากการลดระดับถูกยกเลิกไปครึ่งทาง
Kalob Taulien

1
ฉันมีข้อผิดพลาดที่เกี่ยวข้องกับการ rebase ที่คล้ายกันเพียงแค่มีข้อผิดพลาดที่แตกต่างกัน พยายาม: $ git rebase --abortเอาท์พุท: error: could not read '.git/rebase-apply/head-name': No such file or directoryในที่สุดการแก้ปัญหานี้แก้ไขปัญหาของฉัน:git rebase --quit
AFF

upvoted git rebase --quitช่วยฉันอย่างแน่นอน อาการเช่นเดียวกับที่อธิบายไว้ แต่ของฉันมาหลังจากพยายามที่จะทำgit pull --rebaseซึ่งด้วยเหตุผลบางอย่างล้มเหลว หมายเหตุฉันเปิดใช้งานการเปิดอัตโนมัติอีกครั้ง (เวอร์ชัน 2.27.0.windows.1) และมีการเรียกใช้ VS2019 (ชี้ไปที่ repo นั้น) ในเวลาเดียวกัน - สงสัยว่าสิ่งเหล่านี้ทำให้เกิดความสับสน
ErrCode

90

ฉันมีปัญหาที่คล้ายกันเนื่องจากกระบวนการ vim.exe ของซอมบี้ ฆ่ามันในตัวจัดการงานตามมาด้วยการgit rebase --abortแก้ไข


นี่คือปัญหาของฉันด้วย ฉันใช้handleคำสั่งsysinternals และเห็นว่ากระบวนการ (sh.exe) มีไฟล์ถูกล็อค ใช้pskill <pid>แก้ไขมันสำหรับฉัน
พอลโอลิเวอร์

ฉันมีปัญหาเดียวกัน แต่มี Sublime Text สำหรับฉัน
Toivo Säwén

35

ขอบคุณ @Laura Slocum สำหรับคำตอบของคุณ

ฉันทำสิ่งต่าง ๆ สับสนในขณะที่รีบูตและมีเฮดเดอร์เดี่ยวกับ

 error: could not read orig-head

ที่ป้องกันไม่ให้ฉันจบการรีบูต

HEAD ที่ถอดออกดูเหมือนจะมีสถานะรีบูตที่ถูกต้องของฉันอย่างแม่นยำดังนั้นฉันจึงวิ่ง

rebase --quit

และหลังจากนั้นฉันเช็คเอาต์ temp branch ใหม่เพื่อผูกมันไว้กับหัวที่แยกออก

ด้วยการเปรียบเทียบกับสาขาที่ฉันต้องการลดระดับฉันสามารถเห็นสาขาชั่วคราวใหม่อยู่ในสถานะที่ฉันต้องการเข้าถึง ขอบคุณ


7

พบปัญหาเดียวกันใน Eclipse ไม่สามารถ Rebase => ยกเลิกจาก Eclipse

การดำเนินการรีคอมไพล์ git --abortจาก Git Bash ทำงานให้ฉัน


7

บน Windows หากคุณไม่เต็มใจหรือไม่สามารถรีสตาร์ทเครื่องดูด้านล่าง

ติดตั้ง Process Explorer: https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

ใน Process Explorer ค้นหา> จัดการไฟล์หรือ DLL ...

พิมพ์ชื่อไฟล์ที่กล่าวถึงในข้อผิดพลาด (สำหรับข้อผิดพลาดของฉันมันเป็น 'git-rebase-todo' แต่ในคำถามข้างต้น 'เสร็จสิ้น')

Process Explorer จะเน้นกระบวนการที่ล็อคไฟล์ไว้ (สำหรับฉันมันคือ 'grep')

ฆ่ากระบวนการและคุณจะสามารถยกเลิกการคอมไพล์ด้วยวิธีมาตรฐานได้



3

ในกรณีของฉันรุนแรงขึ้นgit rebase --abortและgit rebase --continueถูกโยน:

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

ฉันจัดการเพื่อแก้ไขปัญหานี้โดยการลบด้วยตนเอง: .git\rebase-applyไดเรกทอรี


2

git version 2.19.2.windows.1ฉันใช้

สิ่งเดียวที่ทำงานสำหรับฉันคือการลบไดเรกทอรีและทำ.git/rebase-apply/git reset --hard


1

ในกรณีของฉันเป็นเพราะฉันได้เปิดบันทึกของ SmartGit ในโครงการ Git และ Total Commander ในไดเรกทอรีโครงการที่เกี่ยวข้อง เมื่อฉันปิดทั้งสองฉันสามารถรีบูทได้โดยไม่มีปัญหา

ยิ่งฉันคิดเกี่ยวกับมันมากเท่าไหร่ฉันยิ่งสงสัยว่า Total Commander มากขึ้นเช่น Windows ที่มีล็อกอยู่ในไดเรกทอรีที่เปิดอยู่

คำแนะนำที่เป็นมิตร: เมื่อคุณพยายามแก้ไขบางสิ่งให้ทำการเปลี่ยนแปลงทีละครั้ง ;)


1

ฉันได้ลองทำตามขั้นตอนข้างต้นทั้งหมดแล้ว แต่ก็ไม่ได้ผลอะไรสำหรับฉัน ในที่สุดการรีสตาร์ทคอมพิวเตอร์ก็สามารถแก้ปัญหานี้ได้: D


1

ด้วย SublimeText 3 บน Windows ปัญหาได้รับการแก้ไขโดยเพียงปิดหน้าต่าง Sublime ที่ใช้สำหรับการส่งมอบแบบโต้ตอบ


0

เมื่อคุณได้เสร็จสิ้นเป็นที่น่าพอใจ rebasing x git rebase --continueจำนวนกระทำคำสั่งสุดท้ายที่จะต้อง ที่ทำให้กระบวนการเสร็จสมบูรณ์และออกจากโหมด rebase


0

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


0

ในกรณีของฉันหลังจากทดสอบตัวเลือกทั้งหมดนี้และยังคงมีปัญหาฉันพยายามsudo git rebase --abortและมันทำทุกสิ่ง


ระวังถ้าคุณกำลังทำสิ่งนี้ในช่วงกลางของการคืนเงินจริง เพิ่งสูญเสียการเปลี่ยนแปลงของฉัน: '(
ฟรีแมน L

มันได้รับการพิจารณาว่า "เสียหาย" จากนั้นคุณเริ่มต้นใหม่ด้วยการลดราคา
Dani.Rangelov

0

ลองทุกอย่างอื่นยกเว้นการรีบูตสิ่งที่ใช้ได้ผลสำหรับฉันคือ rm -fr .git/REBASE_HEAD


0

หากคุณอยู่ต่ำกว่าสถานะและการปฏิเสธไม่ทำงานอีกต่อไป

$ git status
rebase in progress; onto (null)
You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

จากนั้นเรียกใช้ครั้งแรก

$ git rebase -quit

แล้วเรียกคืนสถานะก่อนหน้าจาก reflog

$ git reflog
97f7c6f (HEAD, origin/master, origin/HEAD) HEAD@{0}: pull --rebase: checkout 97f7c6f292d995b2925c2ea036bb4823a856e1aa
4035795 (master) HEAD@{1}: commit (amend): Adding 2nd commit
d16be84 HEAD@{2}: commit (amend): Adding 2nd commit
8577ca8 HEAD@{3}: commit: Adding 2nd commit
3d2088d HEAD@{4}: reset: moving to head~
52eec4a HEAD@{5}: commit: Adding initial commit

ใช้

$ git checkout HEAD@{1} #or
$ git checkout master #or
$ git checkout 4035795 #or

-3

ฉันใช้คอมไพล์ใน eclipse และฉันมีปัญหาเดียวกัน

ในที่สุดฉันก็พบว่ารายการเมนู "Rebase ... " ถูกเปลี่ยนเป็นเมนูย่อยชั่วคราว

ทีม -> Rebase -> ยกเลิก

มันใช้งานได้สำหรับฉัน

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