Конфликт слияния 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.