rebase w toku. Nie można zatwierdzić. Jak kontynuować lub zatrzymać (przerwać)?


146

Kiedy biegam:

git status

Widzę to:

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

Kiedy robię:

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

Widzę: rebase-apply

Nie mogę zobowiązać się do pochodzenia.

git branch

Przedstawia:

* (no branch, rebasing master)
  develop
  master

Utknąłem. Nie wiem co robić Czy rebase naprawdę trwa tak długo? git rebase --continuenic nie robi. Nie mam nic w statusie git .. Po prostu czekam na rebase. Co mogę zrobić?

UDATE: To jest wynik działania: 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 add. nie ma nic.

Odpowiedzi:


267

Rebase nie działa w tle. „Trwa rebase” oznacza, że ​​rozpoczęto ponowne składowanie, które zostało przerwane z powodu konfliktu. Musisz wznowić rebase ( git rebase --continue) lub przerwać ( git rebase --abort).

Jak git rebase --continuesugeruje komunikat o błędzie z , poprosiłeś git o zastosowanie łatki, która skutkuje pustą łatą. Najprawdopodobniej oznacza to, że łatka została już zastosowana i chcesz ją usunąć za pomocą git rebase --skip.


Zaktualizowałem post, aby zawierał git rebase --continue na twoją prośbę.
Joseph Chambers

2
OK, wtedy „rebase --continue nic nie robi” było niedokładne. Aby uzyskać pomoc, powinieneś napisać "git rebase --continue errors następująco ...".
Matthieu Moy

3
Dokumentacja tego jest bardzo kiepska, ciągle powtarza, że ​​„git rebase --continue”, a skończysz w nieskończony sposób, aby to powiedzieć.
Jean-Paul

6
git rebase - pomiń zrobił to!
Borzh

Ponieważ jest to pytanie dla względnie początkujących (takich jak ja), pomyślałem, że warto wspomnieć o całej tej rozmowie o uruchomieniu tego czy tamtego - wymaga otwarcia nowego terminala i powrotu do repozytorium ... nic nie działałoby w moim przypadku tego problemu bez robi to,
Kdean571

14

Utknąłem w „statusie rebase”

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

ale bieg git rebase --skipustąpił error: could not read '.git/rebase-apply/head-name': No such file or directory.

Bieganie rm -fr ".git/rebase-apply"pomogło.

Uwaga: oczywiście rób to tylko wtedy, gdy nie przejmujesz się rebase lub utkniesz na poprzednim rebase, którego już nie chcesz.


9
  • Krok 1: Kontynuuj git rebase --continue

  • Krok 2: napraw KONFLIKTY git add .

  • Wróć do kroku 1, teraz, jeśli mówi, no changes ..to uruchom, git rebase --skipa następnie wróć do kroku 1

  • Jeśli chcesz po prostu zakończyć rebase, uruchom git rebase --abort

  • Po wprowadzeniu wszystkich zmian uruchom git commit -m "rebase complete"i gotowe.


To --continuenie zadziałało, powiedziało mi, że nic się nie zmieniło ... Kiedy już zrobiłem --skip, mogłem po prostu push. Po prostu nie rozumiem tych rzeczy. To tak, jak za każdym razem, gdy robię zupełnie przypadkowe rzeczy, dopóki to nie zadziała.
Alexis Wilke

1
@AlexisWilke Tak, musisz zrobić, --skipgdy nie ma żadnych zmian, abyś mógł kontynuować rebase przy następnym zatwierdzeniu z głównej gałęzi. To, co się właściwie dzieje, polega na tym, że odtwarzasz wszystkie swoje zmiany (w bieżącej gałęzi) w gałęzi głównej, dzięki czemu jesteś na bieżąco z gałęzią główną, a także wprowadzasz zmiany po tym. Przejdź przez: git-scm rebasing (przejdź tylko przez The Basic Rebase z linku i powinieneś mieć dobry pomysł na to, co się dzieje).
Ani Menon

7

Jeśli git rebase --abortnie działa i nadal otrzymujesz

błąd: nie można odczytać pliku „.git / rebase-apply / head-name”: nie ma takiego pliku lub katalogu

Rodzaj:

git rebase --quit

6

Powiedziałeś swojemu repozytorium, aby ponownie bazowało. Wygląda na to, że byłeś na zatwierdzeniu (zidentyfikowanym przez SHA 9c168a5), a następnie zrobiłeś git rebase masterlub git pull --rebase master.

Ponownie bazujesz wzorzec gałęzi na tym zatwierdzeniu. Możesz zakończyć rebase przez git rebase --abort. Spowoduje to przywrócenie stanu, w którym byłeś przed rozpoczęciem ponownego bazowania.


Nigdy nie robię git rebase/pull --rebase master. Często kończę w tym stanie ... z powodu konfliktu. Zmieniam plik, wyciągam, przywracam zmiany i nowa łatka jest pusta, co boli mózg gita, który następnie decyduje się wejść w ten "tryb rebase" ...
Alexis Wilke

6

Niedawno weszłam w ten stan. Po rozwiązaniu konfliktów podczas rebase, zatwierdziłem zmiany, zamiast biegać git rebase --continue. Daje to te same komunikaty, które widziałeś, gdy uruchomiłeś swoje polecenia git statusi git rebase --continue. Rozwiązałem problem, uruchamiając git rebase --abort, a następnie ponownie uruchomiłem rebase. Prawdopodobnie można by też pominąć rebase, ale nie byłem pewien, w jakim stanie zostanę w tym stanie.

$ 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

Oprócz --abort(+1) masz teraz --quit( stackoverflow.com/a/41363262/6309 )
VonC

Po rozwiązaniu konfliktów. następnie wywołaj git commit. wykonaj inną pracę, a następnie ponownie wywołaj git commit. Jeśli użyjesz tej metody git rebase --abort, cała praca, którą wykonujesz po konflikcie zatwierdzenia, zostanie odrzucona. Więc uważaj
Jin

0

I mój setup gitdo autorebase na Agit checkout

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

W przeciwnym razie łączy się automatycznie, gdy przełączasz się między gałęziami, co moim zdaniem jest najgorszym możliwym wyborem jako domyślnym.

Ma to jednak efekt uboczny, kiedy przełączam się na gałąź, a następnie git cherry-pick <commit-id>kończę w tym dziwnym stanie za każdym razem, gdy pojawia się konflikt.

Właściwie muszę przerwać rebase, ale najpierw naprawiam konflikt, git add /path/to/fileplik (kolejny bardzo dziwny sposób rozwiązania konfliktu w tym przypadku ?!), a następnie wykonuję plik git commit -i /path/to/file. Teraz mogę przerwać 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>

Drugi git commit .wydaje się pochodzić z aborcji. Naprawię swoją odpowiedź, jeśli dowiem się, że powinienem przerwać rebasewcześniej.

Opcja --forceon-push jest wymagana, jeśli pomijasz inne zatwierdzenia i obie gałęzie nie są gładkie (w obu brakuje zatwierdzeń w drugiej).


„W przeciwnym razie łączy się automatycznie, kiedy przełączasz się między gałęziami” - Hm, nie. Git nie wykonuje żadnego scalania ani ponownego bazowania podczas zmiany gałęzi. autosetupmergema związek z git pullkonfiguracją dla nowych oddziałów.
Marnen Laibow-Koser

W tym czasie, kiedy walczyłem z tym problemem, z pewnością spowodowało to połączenie różnych kodów. Wydaje się, że moja obecna konfiguracja pomija ten problem. Istnieje również problem polegający na tym, że przed próbą przełączenia nie wykonano zatwierdzenia + wypychania bieżącej gałęzi.
Alexis Wilke

Git powie Ci, czy Twoje niezatwierdzone zmiany uniemożliwiłyby zmianę gałęzi, więc nie ma się czym martwić, prawda? A może mówisz o czymś innym?
Marnen Laibow-Koser

0

Inna opcja ABORT / SKIP / CONTINUE z IDE

VCS> Git> Abort Rebasing

wprowadź opis obrazu tutaj


0

Mój był błąd, który wyskoczył z BitBucket. Ran git am --skipto naprawił.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.