Git - Làm thế nào để sửa lỗi rebase tương tác của Viking bị hỏng?


183

Tôi quản lý để tạo ra một mớ hỗn độn trong kho git cục bộ của tôi. Tôi đã cố gắng khắc phục một cam kết bị hỏng bằng cách sử dụng các hướng dẫn sau đây . Trước khi chạy "git commit --amend" (và sau khi git rebase - không hoạt động) tôi đã quyết định rằng các thay đổi của mình không chính xác và vì vậy tôi đã thực hiện "git reset HEAD --hard". Không phải là một ý tưởng tốt, tôi nói với bạn.

Bây giờ cuộc nổi loạn tương tác dường như bị "mắc kẹt". Git hiển thị nhánh hiện tại là (| REBASE-m). Mỗi lệnh (cd .., ls, git rebase ...) trong kho lưu trữ của tôi đều báo lỗi sau:

cat: .git / rebase-merge / head-name: Không có tệp hoặc thư mục như vậy

Đây là cách git rebase --abort trông như thế nào:

$ 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

Đây là kết quả của git rebase --continue:

$ 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

Có ý kiến ​​gì không? Tôi muốn đặt lại tình huống trở lại trạng thái như trước khi tôi bắt đầu hoạt động rebase được suy nghĩ kỹ lưỡng của mình.

Dưới đây là cách git log --oneline hiển thị tình huống:

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

Và điều này là tốt.

Tôi đang sử dụng msysgit v1.7.0.2.


58
git rebase --quitlàm việc cho tôi
Juan Caiceso

Câu trả lời:


160

Có vẻ như Git đã cố xóa .git/rebase-mergethư mục nhưng không thể xóa hoàn toàn. Bạn đã thử sao chép thư mục đó đi chưa? Cũng sao chép .git/rebase-applythư mục nếu có.


7
Cảm ơn đã chỉ ra rằng. Tôi đã có thể khắc phục vấn đề của mình chỉ bằng cách khởi động lại máy tính. Tôi không chắc chắn điều gì đã xảy ra vì bằng cách nào đó, mọi quyền truy cập vào thư mục hợp nhất .git \ rebase-merge đã gây ra lỗi "Truy cập bị từ chối".
Mikael Koskinen

19
Khởi động lại không làm việc cho tôi nhưng git rebase --abort(từ stackoverflow.com/a/4757777/146044 ) đã làm việc.
backus 28/03/2016

3
Chỉ cần khởi động lại git shell (windows) đã hoạt động với tôi ( git rebase --abortkhông hoạt động)
mhand

4
một lời cảnh báo ... tôi đã có 4 giờ thay đổi trong thư mục làm việc của mình khi nhận thấy lỗi rebase bị hỏng. đã thử git rebase --abortnó xóa sạch những thay đổi không có căn cứ của tôi ... mặc dù lỗi đã biến mất
George Ananda Eman

117
khởi động lại hoặc git rebase --abortvẫn cho tôi các lỗi. git rebase --quitđã làm cho tôi.
Flávio Coleues

197

Tôi đã bị mắc kẹt trong này. Tôi đã tạo tệp tên đầu và sau đó tôi gặp một lỗi khác nói rằng nó không thể tìm thấy tệp trên, vì vậy tôi đã tạo tệp đó. Sau đó, tôi gặp một lỗi khác nói rằng không thể đọc '.git / rebase-áp dụng / lên': Không có tệp hoặc thư mục như vậy.

Vì vậy, tôi đã xem tài liệu git để nổi loạn và tìm thấy một lệnh khác:

git rebase --quit

Điều này đặt tôi trở lại chi nhánh của mình mà không có thay đổi, và tôi có thể bắt đầu cuộc nổi loạn của mình một lần nữa, tốt như mới.


51
git rebase --quitlà nó!
Steven Shaw

5
--quitđã làm việc. --abortkhông phải vì cuộc nổi loạn đã bị hủy bỏ nửa chừng
Kalob Taulien

1
Tôi đã có lỗi liên quan đến rebase tương tự, chỉ với thông báo lỗi khác nhau. Đã thử: $ git rebase --abortĐầu ra: error: could not read '.git/rebase-apply/head-name': No such file or directoryCuối cùng, giải pháp này khắc phục vấn đề của tôi:git rebase --quit
aff

Nâng cao. git rebase --quithoàn toàn cứu tôi Các triệu chứng giống như mô tả, nhưng tôi đến sau khi cố gắng làm một git pull --rebase, vì lý do nào đó đã thất bại. Lưu ý Tôi đã bật tự động bật (phiên bản git 2.27.0.windows.1) và đã chạy VS2019 (chỉ vào repo đó) cùng lúc - nghi ngờ một số kết hợp của những thứ này đã làm nó rối tung lên.
ErrCode

90

Tôi gặp vấn đề tương tự do quá trình zombie vim.exe. Giết nó trong Trình quản lý tác vụ, theo sau là git rebase --abortsửa nó.


đây cũng là vấn đề của tôi Tôi đã sử dụng handlelệnh sysiternals và thấy rằng một quá trình (sh.exe) đã khóa tệp. Sử dụng pskill <pid>cố định nó cho tôi.
Paul Oliver

Tôi đã có cùng một vấn đề, nhưng với Sublime Text cho tôi.
Toivo Säwén

35

Cảm ơn @Laura Slocum cho câu trả lời của bạn

Tôi đã làm mọi thứ rối tung lên trong khi nổi loạn và có một TRỤ SỞ

 error: could not read orig-head

điều đó ngăn cản tôi hoàn thành cuộc nổi loạn.

Đầu tách rời dường như chứa chính xác trạng thái mong muốn phản hồi chính xác của tôi, vì vậy tôi đã chạy

rebase --quit

và sau đó tôi đã kiểm tra một nhánh tạm thời mới để buộc nó vào đầu tách ra.

Bằng cách so sánh nó với nhánh tôi muốn rebase, tôi có thể thấy nhánh temp mới chính xác ở trạng thái tôi muốn tiếp cận. Cảm ơn


7

Có vấn đề tương tự trong Eclipse. Không thể Rebase => hủy bỏ khỏi Eclipse.

Thực hiện git rebase --abort từ Git Bash Làm việc cho tôi.


7

Trên Windows, nếu bạn không muốn hoặc không thể khởi động lại máy, hãy xem bên dưới.

Cài đặt Process Explorer: https://technet.microsoft.com/en-us/sysiternals/bb896653.aspx

Trong Process Explorer, Tìm> Xử lý tệp hoặc DLL ...

Nhập tên tệp được đề cập trong lỗi (đối với lỗi của tôi, đó là 'git-rebase-todo' nhưng trong câu hỏi ở trên, 'xong').

Process Explorer sẽ làm nổi bật quá trình giữ một khóa trên tệp (đối với tôi đó là 'grep').

Giết quá trình và bạn sẽ có thể hủy bỏ hành động git theo cách tiêu chuẩn.


5

Tạo một tệp có tên này:

touch .git/rebase-merge/head-name

và hơn sử dụng git rebase


3

Trong trường hợp của tôi sáng hơn git rebase --abortgit rebase --continueđã ném:

lỗi: không thể đọc '.git / rebase-áp dụng / tên đầu': Không có tệp hoặc thư mục như vậy

Tôi quản lý để khắc phục vấn đề này bằng cách loại bỏ thủ công: .git\rebase-applythư mục.


2

Tôi đang sử dụng git version 2.19.2.windows.1.

điều duy nhất làm việc cho tôi là xóa .git/rebase-apply/thư mục và làm một git reset --hard.


1

Trong trường hợp của tôi, đó là vì tôi đã mở Nhật ký của SmartGit trong dự án Git tương ứng và Total Commander trong thư mục dự án tương ứng. Khi tôi đóng cả hai tôi đã có thể nổi loạn mà không có vấn đề gì.

Càng nghĩ về nó, tôi càng nghi ngờ Total Commander, tức là Windows có khóa trên thư mục đã mở, git rebase đang cố gắng làm gì đó với.

Lời khuyên thân thiện: Khi bạn cố gắng sửa chữa một cái gì đó, luôn luôn thực hiện một thay đổi tại một thời điểm. ;)


1

Tôi đã thử tất cả các bước trên đã đề cập nhưng không có gì hiệu quả với tôi. Cuối cùng, khởi động lại máy tính đã làm việc cho vấn đề này: D


1

Với SublimeText 3 trên Windows, vấn đề được khắc phục bằng cách chỉ đóng các cửa sổ Sublime được sử dụng cho phiên bản cam kết tương tác.


0

Khi bạn đã hoàn thành thỏa đáng việc khởi động lại số lần xác nhận X, lệnh cuối cùng phải là git rebase --continue. Điều đó hoàn thành quá trình và thoát khỏi chế độ rebase.


0

Tôi đã từng gặp vấn đề tương tự. Tôi đã sử dụng process explorer như được đề xuất trong bài đăng khác (tôi không thể tìm thấy bài đăng đó) và tìm ra quy trình nào có khóa trên tệp và giết nó. sau đó thực hiện --continue hoặc --abort theo nhu cầu


0

Trong trường hợp của tôi sau khi thử nghiệm tất cả các tùy chọn này và vẫn gặp sự cố tôi đã thử sudo git rebase --abortvà nó đã làm toàn bộ


Hãy cẩn thận nếu bạn đang làm điều này ở giữa một cuộc nổi loạn thực sự. Chỉ mất những thay đổi của tôi: '(
Freeman L

Nó được coi là "bị hỏng", sau đó bạn bắt đầu lại với cuộc nổi loạn
Dani.Rangelov

0

đã thử mọi thứ khác nhưng khởi động lại, điều làm việc cho tôi là rm -fr .git/REBASE_HEAD


0

Nếu bạn nhận được dưới trạng thái và rebase không hoạt động nữa,

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

Sau đó, đầu tiên chạy,

$ git rebase -quit

Và sau đó khôi phục trạng thái trước đó từ 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

Sử dụng,

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

-3

Tôi đang sử dụng git trong nhật thực và tôi cũng gặp vấn đề tương tự.

Cuối cùng, tôi thấy rằng mục menu "Rebase ..." tạm thời được chuyển thành menu phụ.

Đội-> Rebase -> Hủy bỏ

Nó làm việc cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.