2010-09-10 27 views
65

Tôi đã tạo ra một chút lộn xộn trong kho lưu trữ git cục bộ của mình. Tôi đã cố sửa một cam kết bị hỏng bằng cách sử dụng following instructions. Trước khi chạy "git commit --amend" (và sau khi git rebase --interactive), tôi quyết định rằng các thay đổi của tôi 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 ý kiến ​​hay, tôi nói với bạn.Git - Làm cách nào để sửa lỗi "tương tác" bị hỏng?

Bây giờ, quá trình rebase tương tác dường như bị "kẹt". Git hiển thị nhánh hiện tại là (| REBASE-m). Mỗi lệnh (cd .., ls, git rebase ...) bên trong kho lưu trữ của tôi cung cấp cho các lỗi sau:

cat: .git/rebase-merge/head-name: No such file or directory

Sau đây là cách git rebase --abort trông giống như:

$ 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 

Dưới đâ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 

Bất kỳ ý tưởng nào? Tôi muốn thiết lập lại tình hình trở lại trạng thái trước khi tôi bắt đầu hoạt động rebase.

Sau đây là cách git --oneline log cho thấy tình hình:

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.

Trả lời

57

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

+6

Cảm ơn đã chỉ ra rằng. Tôi đã có thể khắc phục sự cố 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 những gì đã đi sai bởi vì bằng cách nào đó mọi truy cập vào thư mục .git \ rebase-merge gây ra một "Truy cập bị từ chối" -error. –

+16

Khởi động lại không hoạt động đối với tôi nhưng 'git rebase --abort' (từ http://stackoverflow.com/a/4757777/146044) _did_ hoạt động. – Backus

+1

Chỉ cần khởi động lại git shell (windows) làm việc cho tôi ('git rebase --abort' không hoạt động) – mhand

78

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

+0

đây cũng là vấn đề của tôi. Tôi đã sử dụng lệnh 'handle' sysinternals và thấy rằng một tiến trình (sh.exe) đã bị khóa. Sử dụng 'pskill 'đã sửa nó cho tôi. –

0

Khi bạn đã hoàn thành thỏa đáng hoàn thành số lần commit 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 ra khỏi chế độ rebase.

7

Có cùng vấn đề 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.

0

Tôi đã gặp vấn đề tương tự. Tôi đã sử dụng trình thám hiểm quá trình 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à xóa nó. sau đó thực thi --continue hoặc --abort theo nhu cầu

-1

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

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

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

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

5

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/sysinternals/bb896653.aspx

Trong Process Explorer, Tìm> File Handle hoặc DLL ...

Gõ vào tên tập tin được đề cập trong báo lỗi (đối với lỗi của tôi đó là 'git-rebase- todo 'nhưng trong câu hỏi trên,' done ').

Process Explorer sẽ đánh dấu quá trình đang 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.

1

Tạo một file với tên này:

touch .git/rebase-merge/head-name 

và vì sử dụng git rebase

1

Trong trường hợp của tôi đó là vì tôi đã mở Log 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ửa cả hai tôi đã có thể rebase mà không có bất kỳ vấn đề.

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

Lời khuyên thân thiện: Khi bạn cố khắc phục điều gì đó, luôn thực hiện một thay đổi cùng một lúc. ;)

0

Trong trường hợp của tôi sau khi kiểm tra tất cả các tùy chọn này và vẫn có vấn đề tôi đã cố gắng sudo git rebase --abort và nó đã làm toàn bộ điều

+0

Hãy cẩn thận nếu bạn đang thực hiện việc này ở giữa thời điểm thực tế. Chỉ cần mất các thay đổi của tôi: '( –

+0

Nó được coi là "hỏng", sau đó bạn bắt đầu lại với việc rebase –

Các vấn đề liên quan