foo:/opt/bar$ git status
# On branch develop
nothing to commit (working directory clean)
foo:/opt/bar$ git pull --rebase origin develop
From ssh://xxx/yyy
* branch develop -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Applying: Subscription logging added.
Using index info to reconstruct a base tree...
<stdin>:120: trailing whitespace.
* @return integer
<stdin>:143: trailing whitespace.
* @return integer
<stdin>:166: trailing whitespace.
* @return integer
<stdin>:189: trailing whitespace.
* @return integer
<stdin>:212: trailing whitespace.
* @return integer
warning: squelched 3 whitespace errors
warning: 8 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging app/config/config.yml
CONFLICT (content): Merge conflict in app/config/config.yml
Failed to merge in the changes.
Patch failed at 0001 Subscription logging added.
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".
foo:/opt/bar$ git status
# Not currently on any branch.
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: app/config/config.yml
#
no changes added to commit (use "git add" and/or "git commit -a")
foo:/opt/bar$ git add -A
foo:/opt/bar$ git status
# Not currently on any branch.
nothing to commit (working directory clean)
foo:/opt/bar$ git rebase --continue
Applying: Subscription logging added.
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".
foo:/opt/bar$ git add -A
foo:/opt/bar$ git status
# Not currently on any branch.
nothing to commit (working directory clean)
foo:/opt/bar$ git rebase --continue
Applying: Subscription logging added.
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".
foo:/opt/bar$
答案 0 :(得分:40)
你走在正确的道路上。您只需要使用跳过您遇到问题的提交:
git rebase --skip
您已修复冲突,但与之前的提交相比,这没有任何变化。在这种情况下,你不能只是git rebase --continue
,因为你告诉Git创建一个空提交,这是不允许的。
如果您对任何其他提交有冲突,您仍应使用git rebase --continue
。
当您不想在新生成的历史记录中包含某些提交时,--skip
选项也很有用。
答案 1 :(得分:7)
git rebase --skip
确实是正确的解决方案,除非有一种情况会被卡住,并且无法继续使用当前的rebase。
Git 2.0.2(2014年7月)修复了该错误:commit 95104c7见brian m. carlson (bk2204
):
rebase--merge
:修复--skip
连续两次冲突如果
git rebase --merge
遇到冲突,如果下一次提交也存在冲突,--skip
将无效。。
msgnum
文件永远不会使用新的修补程序编号进行更新,因此实际上不会跳过任何修补程序,从而导致不可避免的循环。将
msgnum
文件的值更新为call_merge中的第一个值。
这也避免了&#34;Already applied
&#34;跳过提交时的消息 调用call_merge的其他上下文没有明显的变化,如 在这些情况下,msgnum文件的值保持不变。
答案 2 :(得分:1)
这篇文章帮助我解决了一个类似(如果不是相同的话)的问题,但是OP甚至没有提出任何问题。我知道从命令中可以很清楚地知道发生了什么,但是对于一个不太了解的人来说可能不是那么明显(我几乎只是不理会它),所以:
当您需要重新建立远程分支的基础时,将其命名为 myBranch ,(因为可以说您是几天前推送的,而其他开发人员击败了您并合并了此后的新更改),您可以合并到master(或任何目标分支),则必须重新设置基础。 Gitlab会说:
“无法快速合并。您必须先在本地进行基础调整。”
通常只需要:
git checkout master
git pull
git checkout myBranch
git rebase master
<修复问题,然后git add。>
git rebase --continue
但是在这种特殊情况下,git会告诉您您没有更改,并询问您是否忘记了“ git add”。因为您没有进行任何新的提交,所以您在myBranch中所做的更改已经提交(在其他位置),并且您希望复制旧的提交,因此在这里git rebase --skip是合适的。
希望能帮助像我这样的人,如果他们遇到这个问题并且非常想滚动到最深处!
答案 3 :(得分:0)
Git表示您解决的冲突在以后的提交中再次更改,并且在当前情况下您没有任何更改。 现在git不允许您继续进行基础操作,因为它无法创建空的提交。
如果现在执行git rebase --skip
,则在下一次提交中更改该文件的操作将再次显示相同的冲突。
为避免这种情况,您可以使用以下方法手动提交:
git commit --allow-empty
,然后执行git rebase --skip
。
这将避免再次解决相同的冲突。