Có 3 cam kết - một trong những thích hợp, và sau đó hai ngớ ngẩn dọn dẹp những người, lỗi chính tả vv Vì vậy, tôi muốn squash chúng. Cháy đi:"gây tử vong: ref HEAD không phải là một ref biểu tượng" trong tương tác git rebase
git rebase -i HEAD~3
Âm thanh đơn giản, và nó sẽ hoạt động - Tôi đã thử nó sau khi gặp sự cố, trong một repo hoàn toàn mới và hoạt động như mong đợi. Trình chỉnh sửa hiển thị 3 lần commit, chọn phần đầu, đánh số hai cái còn lại, lưu và thoát, xong. Nếu tôi chạy trong chế độ tiết, tôi thấy nhiều chi tiết hơn - git đi vào trạng thái HEAD tách rời bằng cách kiểm tra cam kết thứ nhất mà tôi đã chọn, rồi 'Rebasing 2/3' và 'Rebasing 3/3', tạo ra một số cam kết tạm thời trên đường đi - và sau đó là một thông điệp thành công; trình chỉnh sửa bật lên một lần nữa tại một số điểm, cung cấp cho tôi thay đổi thông điệp cam kết. Tất cả đều tốt.
Nhưng cùng một lệnh chết trong repo công việc! 3 cam kết trong một biên tập viên, pick-squash-squash .. nhưng lần này, tôi không thấy 'Rebasing 2/3', thay vào đó là dòng đầu tiên sau 'HEAD hiện đang ở my-SHA-1', nó chạy vào một người chết!
HEAD is now at 48a6c3d... <commit message>
fatal: ref HEAD is not a symbolic ref
Nhưng tại sao sẽ git mong đợi HEAD để trở thành một ref tượng trưng? Quá trình rebase không tách rời HEAD - giống như tôi thấy trong ví dụ khám phá của tôi - vậy tại sao lại là cái chết trong ví dụ thứ hai này, nhưng không phải trong ví dụ thứ nhất? cat .git/HEAD cho tôi SHA1 của cam kết mà tôi đã chọn '...
Tôi đã dành nhiều giờ đọc và nghiên cứu, nhưng có điều gì đó không đúng ở đây, và tôi không thể tìm thấy nó là gì! Tôi nghi ngờ rằng có thể một số móc có trách nhiệm (biết rất ít về chúng, và biết repo có vấn đề không có một số). Cảm ơn bạn đã cân nhắc việc trả lời câu hỏi này!
Nếu bạn nghĩ rằng móc có thể là một vấn đề, bạn có thử tắt các móc không? Chúng nằm dưới '.git/hooks /', chỉ cần đổi tên chúng thành ' .off'. Có một cái móc trước khi rebase đặc biệt, 'pre-rebase.sample'. –
nhờ gợi ý - móc hiện nay phần nào bị phân giải .. nó không có ảnh hưởng gì đến vấn đề, nhưng ít nhất là giết một con cá trích đỏ) – alexakarpov
"symbolic ref" trong Git không liên quan gì đến các liên kết tượng trưng trên hệ thống tập tin: "ref" trong giao diện Git là một thực thể trỏ đến một cam kết - một chi nhánh hoặc một thẻ; đây là viết tắt của "reference". Một ref có thể trỏ trực tiếp đến tên SHA-1 của một cam kết (và sau đó nó trực tiếp) hoặc đến * ref khác *, và sau đó nó là "biểu tượng". Ví dụ, 'HEAD' thường trỏ đến một cái gì đó như' refs/heads/master', không phải là commit của master. – kostix