Quên “git rebase --continue” và thực hiện “git commit”. Làm thế nào để khắc phục?


112

Tôi đang khôi phục mã trong git, tôi có một số xung đột hợp nhất. Tôi đã giải quyết các xung đột và đã làm:

git add

Tại thời điểm này, tôi đã quên làm:

git rebase --continue

Tôi tiếp tục viết mã và đã làm:

git commit

cho những thay đổi. Bây giờ tôi đang ở trên "no branch"và không thể làm:

git rebase --continue 

Làm cách nào để sửa lỗi này?


# Hiện không có trên bất kỳ chi nhánh nào. không có gì để cam kết (thư mục làm việc sạch sẽ)
Abhilash

Câu trả lời:


5

CHỈNH SỬA : Hãy xem cả câu trả lời bên dưới để xem đó có phải là giải pháp dễ dàng hơn cho bạn không. https://stackoverflow.com/a/12163247/493106


Tôi phải thử nó, nhưng tôi nghĩ đây là những gì tôi sẽ làm:

  1. Gắn thẻ cam kết mới nhất của bạn (hoặc chỉ cần viết SHA1 của nó ở đâu đó để bạn không làm mất nó): git tag temp
  2. git rebase --abort
  3. Làm lại căn cứ. Bạn sẽ phải giải quyết hợp nhất một lần nữa. :(
  4. git rebase --continue
  5. git cherry-pick temp

Vấn đề với điều này là tempcam kết của bạn có thể chứa cả độ phân giải của hợp nhất và mã mới. Vì vậy, nó có thể phức tạp nhưng tôi sẽ thử nó và xem nó có hoạt động không.


Bạn có thể gắn thẻ như @MatrixFrog nói hoặc bạn cũng có thể lưu nó dưới dạng bản vá. Sau đó hủy bỏ rebase. Kiểm tra trạng thái để đảm bảo repo ở trạng thái mà bạn biết là không có vấn đề gì và sau đó bắt đầu tìm nạp và rebase.
yasouser

17
Đừng làm điều này. Xem câu trả lời của kirikaza dưới đây để biết một cách đơn giản hơn nhiều. Đừng gây rối với việc chọn anh đào và giải quyết xung đột lần thứ hai.
tandrewnichols

4
@Abhilash Hãy chấp nhận câu trả lời của kirikaza. Tôi (cũng như tandrewnichols) đã làm điều này và có một cách dễ dàng hơn nhiều (và internet dường như đồng ý vì câu trả lời đó có gấp 4 lần số phiếu ủng hộ).
David Doria

Giờ đây, số phiếu ủng hộ đã tăng gấp 10 lần ... ngoài ra, hãy sử dụng git rerere để ghi nhớ các giải pháp xung đột của bạn (hữu ích, trừ khi đôi khi bạn đưa ra các giải pháp tồi mà bạn không muốn nó ghi nhớ).
Ajax

216

Chỉ cần làm git reset --soft HEAD^. Nó di chuyển con trỏ HEAD đến cha của nó nhưng vẫn giữ cây công việc và thêm thay đổi hợp nhất vào chỉ mục. Vì vậy, bạn có thể tiếp tục phục hồi git rebase --continuenhư trước.


1
Điều này hoàn toàn có hiệu quả và cũng là lần đầu tiên tôi tìm thấy cách sử dụng --soft. Rất vui khi biết nó hoạt động như thế nào, cảm ơn!
mmocny

1
Tôi hy vọng mọi người sẽ xem tất cả các phiếu bầu cho câu trả lời này và làm theo những gì được gợi ý ở đây!
Raghu

1
Đây chính xác là những gì tôi nghĩ (nhưng có thể đã vượt qua khó khăn một cách tình cờ). Tuy nhiên, không chắc liệu HEAD có được cập nhật trong quá trình rebase hay không. Cảm ơn bạn đã xác nhận! Vì vậy, rất vui vì tôi đã cuộn thêm một chút nữa trước khi gặp phải vấn đề đau đầu ở trên.
DeezCashews

Tôi đã chỉnh sửa câu trả lời được chấp nhận để đặt một liên kết xuống đây- Tôi không thấy câu trả lời này cho đến khi tôi làm theo hướng dẫn ở trên.
xaxxon

0

Tôi gặp phải vấn đề tương tự và để làm cho nó tồi tệ hơn, tôi đang khôi phục lại ba cam kết và sau khi giải quyết xung đột ở cam kết thứ hai, tôi "cam kết" thay vì "rebase --continue".

Kết quả là tôi đã có git reflog này

Khi tôi áp dụng giải pháp của kirikaza, tôi chỉ hoàn nguyên cam kết thứ ba chứ không phải cam kết thứ hai, điều này có vấn đề ..

Như bạn có thể thấy, rebase bắt đầu bằng cách kiểm tra từ nhánh điều khiển từ xa / origin / master và sau đó áp dụng ba cam kết của tôi xuất hiện dưới dạng ba hoạt động trước đó (trước khi thanh toán) trong reflog.

Sau đó, nếu bạn muốn khởi động lại từ một cơ sở sạch, trước khi rebase, bạn chỉ cần đặt lại cứng về băm ngay trước khi kiểm tra hoạt động rebase. Trong trường hợp của tôi (xem hình ảnh):

git reset --hard 859ed3c

Sau đó, bạn có thể bắt đầu một mới git rebase.


0

Tôi đã khôi phục git, khắc phục xung đột, tệp thêm git có xung đột và (do nhầm lẫn) đã cam kết.

Tôi đã thử git reset --soft HEAD^git reset --hardcác giải pháp được đưa ra, nhưng không hiệu quả với tôi.

Tuy nhiên, chỉ git rebase --aborthoạt động: nó đưa tôi trở lại trước khi bắt đầu rebase với một cây làm việc sạch.

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.