web-dev-qa-db-ja.com

Gitリベースマージの競合を続行できません

'master'ブランチに追いつくために 'dev'をリベースしようとしています。

$ 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".

何か案は?

104
awm

rebaseがスタックするのを見たいくつかの状況があります。 1つは、変更がnullになった場合(リベースで既に行われた変更がコミットに含まれている場合)、その場合はgit rebase --skipを使用する必要があります。

わかりやすいです。 git statusを実行すると、変更は表示されません。その場合は、スキップしてください。それが当てはまらない場合は、git statusのコピーを投稿してください。私はさらに支援を試みることができます。

176
Chris Nicola

私がこの問題に遭遇したのは、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もこの状況でうまく機能するようです。

14
Steve Reed

注:Git 2.0.2(2014年7月)は、git rebase --skipがスタックし、現在のリベースを続行できないという1つのケースを修正しました。
を参照 commit 95104c7 by brian m。carlson(bk2204

rebase--merge--skipを修正し、2つの競合が連続して発生する

git rebase --mergeが競合を検出した場合、次のコミットも競合した場合--skipは機能しません
msgnumファイルは新しいパッチ番号で更新されることはないので、実際にパッチがスキップされることはなく、結果として不可避のループが発生します。

Call_mergeの最初のものとしてmsgnumファイルの値を更新します。
これにより、コミットをスキップする際の「Already applied」メッセージも回避されます。
call_mergeが呼び出される他のコンテキストに目に見える変化はありません。これらの状況ではmsgnumファイルの値が変更されないためです。

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

git add変更を忘れたようです...

3
John Brodie