cuộc nổi loạn đang diễn ra. Không thể cam kết. Làm thế nào để tiến hành hoặc dừng lại (hủy bỏ)?


139

Khi tôi chạy:

git status

Tôi thấy điều này:

rebase in progress; onto 9c168a5
You are currently rebasing branch 'master' on '9c168a5'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working directory clean

Khi tôi làm:

ls `git rev-parse --git-dir` | grep rebase || echo no rebase

Tôi thấy: rebase-áp dụng

Tôi không thể cam kết nguồn gốc.

git branch

Trình diễn:

* (no branch, rebasing master)
  develop
  master

Tôi bị kẹt. Tôi không biết phải làm gì? Có thực sự mất nhiều thời gian để nổi loạn? git rebase --continuekhông làm gì cả Tôi không có bất cứ điều gì trong trạng thái git .. Tôi chỉ chờ đợi cuộc nổi loạn. Tôi có thể làm gì?

UDATE: Đây là đầu ra của: git rebase --continue

Applying: no message
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

git thêm. không có gì.

Câu trả lời:


255

Rebase không xảy ra trong nền. "Cuộc nổi loạn đang diễn ra" có nghĩa là bạn đã bắt đầu một cuộc nổi loạn và cuộc nổi loạn bị gián đoạn vì xung đột. Bạn phải tiếp tục rebase ( git rebase --continue) hoặc hủy bỏ nó ( git rebase --abort).

Như thông báo lỗi từ git rebase --continuegợi ý, bạn đã yêu cầu git áp dụng một bản vá dẫn đến một bản vá trống. Rất có thể, điều này có nghĩa là bản vá đã được áp dụng và bạn muốn loại bỏ nó bằng cách sử dụng git rebase --skip.


Tôi đã cập nhật bài đăng để bao gồm git rebase - tiếp tục theo yêu cầu của bạn.
Joseph Chambers

2
OK, sau đó "nó rebase - tiếp tục không làm gì cả" là không chính xác. Bạn nên viết "git rebase - tiếp tục sửa lỗi như sau ..." để được giúp đỡ.
Matthieu Moy

3
Các tài liệu về điều này rất tệ, nó cứ lặp đi lặp lại rằng bạn 'git rebase --continue' và bạn sẽ kết thúc một cách vô tận để nói điều đó.
Jean-Paul

6
git rebase --skip đã làm điều đó!
Borzh

Vì đây là một câu hỏi cho những người mới bắt đầu tương đối (như tôi), tôi nghĩ rằng đáng để đề cập đến tất cả các cuộc nói chuyện này hoặc điều này - đòi hỏi phải mở một thiết bị đầu cuối mới và quay trở lại repo ... không có gì có thể xảy ra trong trường hợp của tôi về vấn đề này mà không có làm điều đó,
Kdean571

10

Tôi bị kẹt trong 'tình trạng rebase', tôi đã nhận

On branch master
Your branch is up to date with 'origin/master'.

You are currently rebasing.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working tree clean

nhưng chạy git rebase --skipmang lại error: could not read '.git/rebase-apply/head-name': No such file or directory.

Chạy rm -fr ".git/rebase-apply"giúp.

Lưu ý: tất nhiên, chỉ làm điều đó nếu bạn không quan tâm đến cuộc nổi loạn hoặc nếu bạn bị mắc kẹt trong cuộc nổi loạn trước đó mà bạn không muốn nữa.


8
  • Bước 1: Tiếp tục đi git rebase --continue

  • Bước 2: sửa CONFLICTS rồi git add .

  • Quay lại bước 1, bây giờ nếu nó nói no changes ..rồi chạy git rebase --skipthì quay lại bước 1

  • Nếu bạn chỉ muốn thoát rebase chạy git rebase --abort

  • Một khi tất cả các thay đổi được thực hiện chạy git commit -m "rebase complete"và bạn đã hoàn tất.


6

Bạn đã nói với kho lưu trữ của bạn để rebase. Có vẻ như bạn đã cam kết (được xác định bởi SHA 9c168a5) và sau đó đã làm git rebase masterhoặc git pull --rebase master.

Bạn đang nổi loạn chủ chi nhánh vào cam kết đó. Bạn có thể kết thúc rebase thông qua git rebase --abort. Điều này sẽ đặt trở lại trạng thái mà bạn đang ở trước khi bạn bắt đầu nổi loạn.


Tôi không bao giờ làm a git rebase/pull --rebase master. Tôi thường kết thúc ở trạng thái này ... vì một cuộc xung đột. Tôi thay đổi một tập tin, thực hiện thao tác kéo, khôi phục các thay đổi của mình và bản vá mới trống rỗng, điều đó làm tổn thương não của git, sau đó quyết định vào "chế độ rebase" này ...
Alexis Wilke

6

Tôi đã vào trạng thái này gần đây. Sau khi giải quyết xung đột trong một cuộc nổi loạn, tôi đã cam kết thay đổi của mình, thay vì chạy git rebase --continue. Điều này mang lại cùng một thông điệp bạn đã thấy khi bạn chạy git statusgit rebase --continuecác lệnh của bạn . Tôi đã giải quyết vấn đề bằng cách chạy git rebase --abort, và sau đó chạy lại rebase. Một người có khả năng cũng có thể bỏ qua cuộc nổi loạn, nhưng tôi không chắc trạng thái nào sẽ khiến tôi rơi vào.

$ git rebase --continue
Applying: <commit message>
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

$ git status
rebase in progress; onto 4df0775
You are currently rebasing branch '<local-branch-name>' on '4df0775'.
  (all conflicts fixed: run "git rebase --continue")

nothing to commit, working directory clean

Ngoài --abort(+1), giờ đây bạn có --quit( stackoverflow.com/a/41363262/6309 )
VonC

Sau khi sửa chữa các xung đột. sau đó gọi git commit. làm một số công việc khác, sau đó gọi lại git commit. Nếu sử dụng phương pháp này git rebase --abort, tất cả công việc bạn đang làm sau khi xung đột cam kết sẽ bị loại bỏ. Vì vậy, hãy cẩn thận
Jin

3

Nếu git rebase --abortkhông hoạt động và bạn vẫn nhận được

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

Kiểu:

git rebase --quit

0

Tôi thiết lập của tôi gitđể autorebase trêngit checkout

# in my ~/.gitconfig file
[branch]
    autosetupmerge = always
    autosetuprebase = always

Mặt khác, nó tự động hợp nhất khi bạn chuyển đổi giữa các nhánh, mà tôi nghĩ là sự lựa chọn tồi tệ nhất có thể làm mặc định.

Tuy nhiên, điều này có tác dụng phụ, khi tôi chuyển sang một nhánh và sau đó git cherry-pick <commit-id>tôi kết thúc trong trạng thái kỳ lạ này mỗi khi nó có xung đột.

Tôi thực sự phải hủy bỏ rebase, nhưng trước tiên tôi sửa lỗi xung đột, git add /path/to/filetệp (một cách rất lạ khác để giải quyết xung đột trong trường hợp này?!), Sau đó làm a git commit -i /path/to/file. Bây giờ tôi có thể hủy bỏ rebase:

git checkout <other-branch>
git cherry-pick <commit-id>
...edit-conflict(s)...
git add path/to/file
git commit -i path/to/file
git rebase --abort
git commit .
git push --force origin <other-branch>

Thứ hai git commit .dường như đến từ việc phá thai. Tôi sẽ sửa câu trả lời của mình nếu tôi phát hiện ra rằng tôi nên bỏ thai rebasesớm hơn.

Việc --forceđẩy được yêu cầu nếu bạn bỏ qua các cam kết khác và cả hai nhánh đều không trơn tru (cả hai đều thiếu các cam kết từ bên kia).


Nếu không, nó sẽ tự động hợp nhất khi bạn chuyển đổi giữa các nhánh. Git không thực hiện bất kỳ loại hợp nhất hoặc rebase nào khi bạn chuyển nhánh. autosetupmergephải làm như thế nào với git pullcấu hình cho các chi nhánh mới.
Marnen Laibow-Koser

Tại thời điểm này khi tôi đang chiến đấu với vấn đề đó, nó chắc chắn đã thực hiện một số loại hợp nhất các mã khác nhau. Thiết lập hiện tại của tôi dường như bỏ qua vấn đề đó. Ngoài ra còn có vấn đề về việc không thực hiện cam kết + đẩy chi nhánh hiện tại của bạn trước khi thử chuyển đổi.
Alexis Wilke

Git sẽ cho bạn biết nếu những thay đổi không được cam kết của bạn sẽ ngăn chuyển đổi chi nhánh, vì vậy không có gì phải lo lắng về điều đó, phải không? Hay bạn đang nói về cái gì khác?
Marnen Laibow-Koser

0

Một tùy chọn khác để ABORT / SKIP / TIẾP TỤC từ IDE

VCS> Git> Hủy bỏ nổi loạn

nhập mô tả hình ảnh ở đây


0

Của tôi là một lỗi xuất hiện từ BitBucket. Ran đã git am --skipsửa nó.

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.