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

有任何想法吗?


注意:在某些情况下,a git rebase --skip仍然无法正常工作。直到Git 2.0.2(2014年7月)。请在下面
VonC

Answers:


223

在一些情况下,我见过rebase被卡住。一种是如果更改变为空(提交的更改已在rebase中进行过),在这种情况下,您可能必须使用git rebase --skip

这很容易告诉。如果执行git status此操作,则不会显示任何更改。如果是这样,请跳过它。如果不是这种情况,请发布的副本,git status我可以尝试进一步提供帮助。


没错,没有“应有”的更改。我跳过了它,然后比较了文件的本来应该是的样子。
2013年

当我的'git pull --rebase origin master'陷入需要解决冲突和跳过之间的循环时,这对我有所帮助。经过更多的耐心,我得到了解决,ty!
AnneTheAgile 2015年

3
git status返回:“正在进行基准调整;在<commitnumber>上,您当前正在在'<commitnumber>'上对分支'<branchname>'进行基准调整。(已解决所有冲突:运行“ git rebase --continue”)“。git rebase --continue不返回任何更改,而git rebase --skip可以,但是在我的情况下,我一次又一次地遇到这种情况。是对的还是有什么问题?
adi

谢谢。我担心--skip这样做会比继续进行所做的更改更糟。
jchook

在我的案例中,Intellij Idea GUI和SourceTree都显示了每个文件都已添加到提交中,而git status显示出有一个文件已被修改但没有添加到提交中。执行add somefile.txt允许继续进行基础调整。
阿齐兹比克人

16

我遇到这个问题的时候之一是在a git commit之后执行git add。因此,以下序列将产生您提到的rebase错误:

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年7月)修复了一种情况,其中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就在其上方。
2013年

正确,您使用git add并继续合并,由于另一个文件存在冲突,合并停止了,因此您也需要修复该合并。我在这里想念什么吗?
约翰·布罗迪

1
它与报告需要合并的文件相同。好的,只是为您服务,我将再执行一次“ git add”,但这是相同的结果。
2013年

谢谢!那就是我的情况:我解决了冲突,但没有上演变更。
Kirill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.