Git rebase - 即使所有合并冲突都已解决,也会继续抱怨

Luc*_*cas 94 git rebase

我正面临一个我不确定如何解决的问题.

我从我的分支机构对主人做了一次反对:

git rebase master
Run Code Online (Sandbox Code Playgroud)

并得到以下错误

 First, rewinding head to replay your work on top of it...
 Applying: checkstyled.
 Using index info to reconstruct a base tree...
 Falling back to patching base and 3-way merge...
 Auto-merging AssetsLoader.java
 CONFLICT (content): Merge conflict in AssetsLoader.java
 Failed to merge in the changes.
 Patch failed at 0001 checkstyled.
Run Code Online (Sandbox Code Playgroud)

所以我去了我最喜欢的编辑器,修复了1行冲突,保存了文件并执行了git状态并获得了以下输出:

 # Not currently on any branch.
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #  modified:   PassengerContactHandler.java
 #
 # Unmerged paths:
 #   (use "git reset HEAD <file>..." to unstage)
 #   (use "git add/rm <file>..." as appropriate to mark resolution)
 #
 #  both modified:      AssetsLoader.java
 #
Run Code Online (Sandbox Code Playgroud)

我做了一个git添加AssetsLoader.java和一个git状态并得到以下内容:

 # Not currently on any branch.
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #  modified:   AssetsLoader.java
 #  modified:   PassengerContactHandler.java
 #
Run Code Online (Sandbox Code Playgroud)

当我做git rebase时 - 继续我得到:

git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add
Run Code Online (Sandbox Code Playgroud)

我知道我可以跳过补丁并继续使用rebase,但我不确定PassengerContactHandler.java中的更改是否会重新绑定到我的分支中.

所以我不确定,我该怎么办?

编辑:可能是解决冲突的文件与原始版本完全一样吗?

非常感谢,卢卡斯

编辑,它再次发生在我身上:

它再次发生在我身上,

(307ac0d...)|REBASE)$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   assets/world/level1/Level-1.xml
#   modified:   George.java
#   modified:   DefaultPassenger.java
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   mb-art/originalAssets/27dec/
Run Code Online (Sandbox Code Playgroud)

((307ac0d ...)| REBASE)$ git rebase --continue

You must edit all merge conflicts and then
mark them as resolved using git add
Run Code Online (Sandbox Code Playgroud)

git --version

git version 1.7.1
Run Code Online (Sandbox Code Playgroud)

jon*_*sfh 100

发生这种情况是因为在修复冲突时,您删除了应用于您正在重新定位的分支的补丁程序中的所有代码.使用git rebase --skip继续.

更多细节:

通常,在重新定位期间修复冲突时,您将编辑冲突文件,将当前正在应用的修补程序中的部分或全部代码保留到您重新绑定的分支上.修好补丁后再做

git add your/conflicted/file
git status
Run Code Online (Sandbox Code Playgroud)

你会得到一条(通常是绿色的)显示修改过的文件的行

修改:你的/冲突/文件

git rebase - 在这种情况下继续工作正常.

但是,有时候,在解决冲突时,您会删除新补丁中的所有内容,只保留您重新启用的分支中的代码.现在,当您添加文件时,它将与您尝试重新绑定的文件完全相同.git status将不显示显示已修改文件的绿线.现在,如果你这样做

git rebase --continue
Run Code Online (Sandbox Code Playgroud)

git会抱怨

没有变化 - 你忘了使用'git add'吗?

在这种情况下,git真正想要你做的是使用

git rebase --skip
Run Code Online (Sandbox Code Playgroud)

跳过补丁.以前我从来没有这样做,因为我总是不确定如果我这样做会实际跳过什么,对我来说,"跳过这个补丁"真的意味着什么并不明显.但如果你没有得到绿线

修改:你的/冲突/文件

在编辑冲突的文件,添加它并执行git状态之后,你可以非常确定你删除了整个补丁,你可以改用

git rebase --skip
Run Code Online (Sandbox Code Playgroud)

接着说.

原帖说这有时会起作用:

git add -A
git rebase --continue
# works magically?
Run Code Online (Sandbox Code Playgroud)

...但不要依赖于此(并确保不在存储库文件夹中添加剩余文件)

  • 使用命令 git rebase --skip 时要小心,你可能会丢失你的工作(编辑过的文件) (7认同)
  • 这破坏了我花了几个小时解决的冲突解决方案,而且我不知道如何恢复它们。 (5认同)
  • 我有一个文件在变基期间发生冲突。我解决了这个问题,但在尝试继续变基之前做了一些其他更改。使用此处概述的“--skip”,导致我的所有更改都被破坏,并且没有重新设置任何内容。必须使用 reflog 进行恢复,并损失了至少一个小时的工作。当心 (4认同)
  • 在一般情况下,这不是一个好的解决方案:当您修改了更多文件并执行“git rebase --skip”时,您将丢失所有更改 (4认同)
  • 使用 --skip 时我丢失了所有更改。 (3认同)
  • 虽然当冲突解决导致提交没有更改时,“--skip”是正确的做法,但本问题的情况并非如此。请注意,原始问题有几个文件在暂存区域中发生了更改。 (2认同)
  • 在我发现我所做的一些更改被删除后,我完全停止这样做了。谨慎使用。 (2认同)
  • **不要**执行`git rebase --skip`,除非您非常确定您**绝对没有**要提交的内容。 (2认同)
  • 如果您希望在 `git rebase --skip` 之后返回提交,请使用以下解决方案:/sf/answers/2727141371/ (2认同)

acm*_*cme 21

似乎是Git 1.7中的一个错误

这是一篇关于如何解决这个问题的好文章.

基本上它应该工作,如果你这样做

git diff
Run Code Online (Sandbox Code Playgroud)

在解决你的冲突然后

git rebase --continue
Run Code Online (Sandbox Code Playgroud)

应该管用.


Sco*_*des 20

I got this warning when I had unstaged files. Make sure you don't have any unstaged files. If you don't want the unstaged files changes, then discard the changes with

git rm <filename>  
Run Code Online (Sandbox Code Playgroud)

  • 如此简单,它可以是一条评论;如此有帮助,应该是一个答案。谢谢! (4认同)

gsa*_*edo 7

修复更改后,您可能会忘记运行“git add -A”

git add -A
git rebase --continue
Run Code Online (Sandbox Code Playgroud)


pri*_*ris 6

解决冲突后,请确保将更改的文件添加到您的暂存文件中。这为我解决了这个问题。


Bat*_*ins 5

尝试在命令行中运行此命令:

$ git mergetool
Run Code Online (Sandbox Code Playgroud)

应该打开一个交互式编辑器,让您解决冲突。比尝试手动执行更容易,而且 git 会识别您何时进行合并。还将避免当您尝试手动执行合并时可能发生的意外未完全合并的情况。


Eth*_*her 4

您错过了 AssetsLoader.java 中的合并冲突。打开它并查找冲突标记(“>>>>”、“====”、“<<<<<”),然后再次执行 git add 。如果您找不到它,请执行“git diff --staged”。

  • 当您尝试继续前进时,Git 不会查找合并冲突标记。它只是检查索引是否处于干净状态。如果您暂存的文件中仍包含冲突标记,则表明您希望在提交时将其包含在其中。这可能总是一个错误,但它会让你这么做。 (5认同)
  • 我对所有跟踪的文件执行了 grep,并且没有冲突标记。 (4认同)