Nie można kontynuować konfliktu scalania Git Rebase

136

Próbuję zmienić bazę „dev”, aby dogonić gałąź „master”.

$ git checkout dev 
$ git rebase master 
First, rewinding head to replay your work on top of it...
Applying: Corrected compilation problems that came from conversion from SVN.
Using index info to reconstruct a base tree...
M       src/com/....
<stdin>:125: trailing whitespace.
/**
<stdin>:126: trailing whitespace.
 *
<stdin>:127: trailing whitespace.
 */
<stdin>:128: trailing whitespace.
package com....
<stdin>:129: trailing whitespace.

warning: squelched 117 whitespace errors
warning: 122 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging src/com/....
CONFLICT (content): Merge conflict in src/com/...
Failed to merge in the changes.
Patch failed at 0001 Corrected compilation problems that came from conversion from SVN.

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

$ vi src/com/.....   { fixed the merge issue on one file } 
$ git add -A . 
$ git rebase --continue 
src/com/....: needs merge
You must edit all merge conflicts and then
mark them as resolved using git add
$ vi src/com....      { verified, no >>> or <<< left, no merge markers } 
$ git rebase --continue 
Applying: Corrected compilation problems that came from conversion from SVN.
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 would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".

Jakieś pomysły?

awm
źródło
Uwaga: są przypadki, w git rebase --skipktórych nadal może nie działać poprawnie. Do wersji Git 2.0.2 (lipiec 2014). Zobacz moją odpowiedź poniżej
VonC

Odpowiedzi:

235

Jest kilka sytuacji, w których rebaseutknąłem. Jednym z nich jest sytuacja, w której zmiany staną się puste (zatwierdzenie ma zmiany, które zostały już wprowadzone w rebase), w którym to przypadku może być konieczne użycie git rebase --skip.

Łatwo to stwierdzić. Jeśli to zrobisz, git statusnie powinno pokazać żadnych zmian. Jeśli tak, po prostu to pomiń. Jeśli tak nie jest, prześlij kopię, git statusa postaram się pomóc dalej.

Chris Nicola
źródło
Nie, to było to, nie było żadnych zmian. Pominąłem to i porównałem plik, po czym był taki, jaki powinien być.
awm
Pomogło mi to, gdy mój „git pull --rebase origin master” zdawał się utknąć w pętli między potrzebą rozwiązania konfliktów a pominięciem. Po trochę większej cierpliwości, jestem naprawiony, ty!
AnneTheAgile
3
git status zwraca: "rebase w toku; na <commitnumber> Aktualnie zmieniasz bazę gałęzi '<branchname>' na '<commitnumber>'. (wszystkie konflikty rozwiązane: uruchom" git rebase --continue ")". git rebase --continue nie zwraca żadnych zmian, podczas gdy git rebase --skip to robi, ale w moim przypadku powtarzam tę sytuację. Czy to prawda, czy coś jest nie tak?
adi
Dzięki. Martwiłem się, --skipże poradzę sobie gorzej, niż tylko pójdę dalej ze zmianami, które wprowadziłem.
jchook
W moim przypadku zarówno Intellij Idea GUI, jak i SourceTree pokazywały, że każdy plik został dodany do zatwierdzenia, podczas gdy git statuspokazał, że istnieje plik, który został zmodyfikowany, ale nie został dodany do zatwierdzenia. Wykonywanie add somefile.txtmoże być kontynuowane przy zmianie bazy.
Azizbekian
17

Jednym z przypadków, w których napotkałem ten problem, było wykonanie a git commitpo git add. Tak więc następująca sekwencja spowoduje błąd rebase, o którym wspomniałeś:

git add <file with conflict>
git commit -m "<some message>"
git rebase --continue

Podczas gdy poniższa sekwencja działa bez żadnych błędów i kontynuuje rebase:
git add <file with conflict>
git rebase --continue

Możliwe, że git add -Aprzy opcji „Wszystkie” tworzy się podobna sytuacja. (Proszę zauważyć, że jestem bardzo niedoświadczony w git, więc ta odpowiedź może nie być poprawna.) Aby być bezpiecznym, git rebase --skipwydaje się, że działa dobrze w tej sytuacji.

Steve Reed
źródło
6

Uwaga: Git 2.0.2 (lipiec 2014 r.) Naprawił jeden przypadek, w którym git rebase --skiputknąłby i nie byłby w stanie kontynuować aktualnej rebase.
Zobacz popełnić 95104c7 przez brian m. carlson ( bk2204)

rebase--merge: napraw --skipz dwoma konfliktami z rzędu

Jeśli git rebase --mergenapotkał konflikt, --skipnie zadziała, jeśli następne zatwierdzenie również będzie w konflikcie . Plik nigdy by być na bieżąco z nowym numerem poprawki, więc nie łata będzie faktycznie pomijane, co powoduje nieuniknione pętli.
msgnum

Zaktualizuj wartość msgnumpliku jako pierwszą rzecz w call_merge.
Pozwala to również uniknąć komunikatu „ Already applied” podczas pomijania zatwierdzenia.
Nie ma widocznych zmian w innych kontekstach, w których wywoływana jest funkcja call_merge, ponieważ wartość pliku msgnum pozostaje w tych sytuacjach niezmieniona.

VonC
źródło
3
$ vi src/com....      { verified, no >>> or <<< left, no merge markers } 
$ git rebase --continue 

Wygląda na to, że zapomniałeś o git addswoich zmianach ...

John Brodie
źródło
To była tylko "weryfikacja", żadne zmiany nie były potrzebne za drugim razem ... git add był tuż nad tym.
awm
Dobrze, użyłeś, git adda następnie kontynuowałeś scalanie i zatrzymało się, ponieważ inny plik zawiera konflikty, więc musisz również naprawić ten plik. Czy coś mi umyka?
John Brodie,
1
To ten sam plik, który wymaga połączenia. ok, tylko dla ciebie zrobię kolejne "git add", ale to ten sam wynik.
awm
Dzięki! Taka była moja sytuacja: rozwiązywałem konflikty, ale nie inscenizowałem zmian.
Kirill,
0

Po rebase z mnóstwem konfliktów (długich git status) nie mogłem zrozumieć, co miałem wystawić. Używam Gita zintegrowanego z PhpStormem i nie pokazał on żadnych plików niestopowych.

git add .nie rozwiązałem tego, ale ten komentarz zalecał dzwonienie git diff-files --ignore-submodules. To pokazało trzy pliki, które musiałem specjalnie dodać git i to załatwiło sprawę.

Petr „PePa” Pavel
źródło