Конфликт слияния Git rebase не может продолжаться


131

Я пытаюсь переустановить «dev», чтобы догнать ветку «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".

Любые идеи?


Примечание: бывают случаи, когда по- git rebase --skipпрежнему не работает должным образом. До Git 2.0.2 (июль 2014 г.). Смотрите мой ответ ниже
VonC

Ответы:


225

Я видел пару ситуаций, в которых rebaseзастревали. Один из них - если изменения становятся нулевыми (фиксация имеет изменения, которые уже были сделаны ранее в перебазировании), и в этом случае вам, возможно, придется использовать git rebase --skip.

Это довольно легко сказать. Если вы это сделаете, git statusэто не должно показывать никаких изменений. Если так, просто пропустите это. Если это не так, опубликуйте копию, git statusи я постараюсь помочь.


Нет, никаких изменений не было. Я пропустил его и потом сравнил файл с тем, каким он должен был быть.
awm

Это помогло мне, когда мой «git pull --rebase origin master», казалось, застрял в цикле между необходимостью разрешать конфликты и пропуском. После немного большего терпения я исправился, ти!
AnneTheAgile

3
git status возвращает: «выполняется перебазирование; на <commitnumber> Вы в настоящее время перебазируете ветку« <branchname> »на« <commitnumber> ». (все конфликты исправлены: запустите« git rebase --continue »)». git rebase --continue не возвращает изменений, тогда как git rebase --skip do, но в моем случае я получаю эту ситуацию снова и снова. Это правильно или что-то не так?
ади

Спасибо. Я волновался, --skipчто поступит хуже, чем просто продолжу вносить изменения.
jchook 06

В моем случае как Intellij Idea GUI, так и SourceTree показали, что каждый файл был добавлен в фиксацию, тогда как git statusпоказали, что был файл, который был изменен, но не был добавлен в фиксацию. Выполнение add somefile.txtпозволило продолжить перебазирование.
азизбекян

16

Один из случаев, когда я сталкивался с этой проблемой, - это когда я выполнял git commitпосле git add. Итак, следующая последовательность приведет к упомянутой вами ошибке перебазирования:

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

При этом приведенная ниже последовательность выполняется без ошибок и продолжает перебазирование:
git add <file with conflict>
git rebase --continue

Возможно, что git add -Aс опцией «Все» создается аналогичная ситуация. (Обратите внимание, что я очень неопытен в git, поэтому этот ответ может быть неверным.) На всякий случай, git rebase --skipкажется, также хорошо работает в этой ситуации.


6

Примечание. Git 2.0.2 (июль 2014 г.) исправил один случай, когда a git rebase --skipзависал и не мог продолжить текущую перебазировку.
См совершать 95104c7 по Брайан м. Карлсон ( bk2204)

rebase--merge: исправить --skipс двумя конфликтами подряд

При git rebase --mergeвозникновении конфликта --skipне будет работать, если следующая фиксация также будет конфликтной . Файл никогда не будет обновляться с новым номером патча, так что нет патча не будет на самом деле быть пропущен, что приводит к неизбежному петле.
msgnum

Обновление в msgnumзначение файла как первое , что в call_merge.
Это также позволяет избежать сообщения " Already applied" при пропуске фиксации.
Нет никаких видимых изменений для других контекстов, в которых вызывается call_merge, поскольку значение файла msgnum остается неизменным в этих ситуациях.


3
$ vi src/com....      { verified, no >>> or <<< left, no merge markers } 
$ git rebase --continue 

Похоже, вы забыли внести git addизменения ...


Это была только «проверка», во второй раз никаких изменений не потребовалось ... git add был прямо над ним.
awm

Правильно, вы использовали, git addа затем продолжили слияние, и оно остановилось из-за конфликта в другом файле, поэтому вам нужно исправить и этот. Я что-то упустил?
Джон Броди

1
Это тот же файл, который сообщает о необходимости объединения. хорошо, только для вас я сделаю еще один "git add", но результат будет тот же.
awm

Спасибо! Такова была моя ситуация: я разрешал конфликты, но не вносил изменения.
Кирилл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.