2012-05-07 35 views
8

Tôi gặp sự cố nghiêm trọng khi cố gắng thực hiện git rebase --interactive trên repo của mình. Tôi nhận được lỗi khó hiểu fatal: ref HEAD is not a symbolic ref và quá trình rebase của tôi ngừng hoạt động. Tôi phải git rebase --abort để quay lại trạng thái tốt.Tôi không thể git rebase --interactive nữa

Sau đây là các đầu ra (s) Tôi nhận: https://gist.github.com/d38f1e2d2ec9bc480b6f

Những gì tôi đã nói trong quá khứ là điều này là do thực tế là tôi đang ở "ĐẦU tách ra" chế độ, nhưng làm thế nào sẽ Tôi đã nhận được vào rebase ở nơi đầu tiên nếu tôi đang ở trong chế độ đó? Tôi chắc chắn nhất bắt đầu từ master, sau đó chạy git rebase --interactive và sửa đổi tệp văn bản git-rebase-todo thành những gì tôi muốn. Và sau đó lỗi này xảy ra.

Tôi đã hỏi mọi người ở đây tại nơi làm việc và một số người @ #git trên freenode. Không ai có thể thực sự hiểu được vấn đề của tôi hoặc biết giải pháp là gì. Googling cho rằng lỗi sản xuất không có gì, tìm kiếm có liên quan trên StackOverflow đã chứng minh không có gì. Tôi dường như không thể hiểu được điều này, và nó thực sự què xuống từ việc đè bẹp mọi cam kết mà tôi cố gắng làm chủ để thúc đẩy mọi thay đổi nhỏ mà tôi thực hiện như là một cam kết riêng biệt.

+0

Một rebase succezsfull -i được mô tả ở đây: http://davidstechtips.com/2011/03/collapsing-commits-in-git/. Trong trường hợp của bạn, hãy thử 'git checkout master ', giống như '8bbfbba' có thể? Hoặc bạn không làm một 'git rebase --continue' sau một cuộc xung đột? – VonC

+1

Nó có thể là bạn vẫn còn trong một rebase trước đó mà detaches đầu trong quá trình tái chế của nó. Điều này có thể xảy ra dễ dàng trong quá trình hồi phục lớn trong sức nóng của việc sửa chữa bước tương tác hiện tại và bạn có thể bị phân tâm. Tôi đã làm việc thông qua một rebase, nơi tôi đã có rất nhiều công việc (nhiều bước nhỏ) để làm, nhưng cuối cùng đã làm một 'rebase -i' riêng biệt cho mỗi và mọi bước chỉ vì vậy tôi đã không bị lạc. Việc kích hoạt trình git-gui và gitk visualiser cũng sẽ giúp ích cho bạn. [chắc chắn rằng bạn đang bắt đầu trên một trong các chi nhánh địa phương của bạn] –

+0

Bạn có thể xác định xem bạn có thực sự ở chế độ HEAD tách rời hay không bằng cách xem nội dung của '.git/HEAD' Nếu nó chứa văn bản như" ref: refs/heads/... "bạn đang _not_ trong chế độ HEAD tách rời. Mặt khác, nếu nó chứa một SHA-ID (ví dụ: một chuỗi ký tự và số), bạn thực sự đang ở chế độ HEAD tách rời. –

Trả lời

3

Trong khi 'git rebase', ref mà bạn đang rebasing off được kiểm tra. Nếu ref đó là một cam kết thì bạn sẽ nhận được một đầu tách rời; nếu nó là một tham chiếu chi nhánh thì nhánh đó được kiểm tra. Nếu trong quá trình của một cam kết một FATAL xảy ra, sau đó bạn đang trái với một thư mục làm việc trong một trạng thái nghiền. Ví dụ, nếu bạn đang ở trên nhánh Foo và bạn đã cố gắng để rebase off của Bar, sau đó sau một FATAL bạn sẽ ở Bar ​​hoặc một nơi nào đó sau khi Bar với một vài commit rebase được áp dụng. Bạn phục hồi bằng cách kiểm tra Foo đơn giản.

git rebase --abort 

hoặc, nếu rebase thực sự là đệm nằm (xem tài liệu tham khảo dưới đây), như:

git checkout -f Foo 

Sau đó, bạn có thể yên tâm thử rebase một lần nữa để cố gắng gỡ lỗi tại sao Fatal xảy ra. Here là trường hợp không thể chạy lại khi hết bộ nhớ và 'git rebase --abort' không hoạt động.

+1

Sử dụng 'git checkout -f' không giải quyết được sự cố của tôi. Tôi đã làm 'git rebase --abort' để thoát ra khỏi đợt rebase mỗi lần. Đây là những gì tôi nhận được khi tôi thử 'git checkout -f': https://gist.github.com/4d3aa867602f1e438e9b – tubbo

+0

Điều này là do tôi sử dụng' git-tracker'. Lấy làm tiếc!! – tubbo

+0

Sử dụng 'git rebase --abort' là cách tiếp cận ưu tiên; nhưng nó không phải lúc nào cũng hiệu quả (xem tham khảo) – GoZoner

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