我正面临一个我不知道如何解决的问题。

我从我的分支对master做了一个rebase:

git rebase master

并得到以下错误

 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.

所以我去我最喜欢的编辑器,修复了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
 #

我做了一个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
 #

当我git rebase -continue时,我得到:

git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add

我知道我可以跳过补丁并继续重新建立基础,但我不确定passenger - contacthandler .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/

((307ac0d…)|REBASE)$ git REBASE—继续

You must edit all merge conflicts and then
mark them as resolved using git add

去 --版本

git version 1.7.1

当前回答

我刚刚遇到了这个问题,虽然我认为可能有一些原因,但这是我的……

我有一个git预提交钩子,它在某些条件下拒绝提交。这在手动提交时很好,因为它将显示钩子的输出,我可以使用commit——no-verify修复它或选择忽略它。

问题似乎是,当重基时,rebase——continue也会调用钩子(为了提交最新一轮的更改)。但是rebase不会显示钩子输出,它只会看到它失败了,然后抛出一个不太具体的错误,说“你必须编辑所有合并冲突,然后将它们标记为使用git add解决”

要解决这个问题,请阶段性地执行所有更改,而不是执行“git rebase—continue”,而是尝试执行“git commit”。如果你也遇到了同样的问题,你应该看到它失败的原因。

有趣的是,虽然git rebase不显示来自git钩子的输出,但它确实接受——no-verify来绕过钩子。

其他回答

您在assetloader .java中错过了合并冲突。打开它,寻找冲突标记(“>>>>”,“====”,“<<<<<”),然后再次进行git添加。如果你很难找到它,就做一个“git diff - staging”。

试着在你的命令行中运行:

$ git mergetool

应该会弹出一个交互式编辑器,允许您解决冲突。这比手动操作要简单,而且git在合并时也能识别。也将避免当您尝试手动操作时,意外发生的不完全合并的情况。

公认的答案具有误导性。它造成的麻烦比它可以避免的要多(参考注释)。

我意识到git rebase -continue对我不起作用,因为我有一些本地文件被修改了,但没有暂存。运行以下命令抑制了我的本地、非阶段性修改。所以请小心,这就是你想要的。

git checkout .

如果您想要进行修改,则运行git add <文件>的名称。

如果你想隐藏(搁置)修改,运行git stash -k。

运行git rebase——continue可以在这两个命令后运行。

如果你选择隐藏,运行git stash pop(在git rebase -continue之后)来恢复修改。

我只是偶然发现了这个问题。我就不改了,跳过 因为git状态清楚地显示了阶段性的修改,这是我想保留的。虽然我有一些意外的额外文件。我决定

git checkout .

要删除未分段的修改,则git rebase—continue succeeded。

我刚刚遇到了这个问题,虽然我认为可能有一些原因,但这是我的……

我有一个git预提交钩子,它在某些条件下拒绝提交。这在手动提交时很好,因为它将显示钩子的输出,我可以使用commit——no-verify修复它或选择忽略它。

问题似乎是,当重基时,rebase——continue也会调用钩子(为了提交最新一轮的更改)。但是rebase不会显示钩子输出,它只会看到它失败了,然后抛出一个不太具体的错误,说“你必须编辑所有合并冲突,然后将它们标记为使用git add解决”

要解决这个问题,请阶段性地执行所有更改,而不是执行“git rebase—continue”,而是尝试执行“git commit”。如果你也遇到了同样的问题,你应该看到它失败的原因。

有趣的是,虽然git rebase不显示来自git钩子的输出,但它确实接受——no-verify来绕过钩子。