Eclipse EGit检出文件冲突:-EGit不想继续进行

48

我已经启动了Eclipse EGit,在某些情况下它确实不够全面。

我本地的文件,例如pom.xml被更改。在git服务器上,这个文件也被更改了。 我执行pull,EGit会显示:

检出文件冲突:

即拉取停止(fetch已完成,但没有进行merge),这是可以的。但是接下来的体验很糟糕。

我同步工作区,将我的更改放在一边,并使其与FETCH_HEAD相同。但是EGit不想继续。我用HEAD版本替换了文件。但是EGit仍然不想继续。

冲突解决后,EGit希望用户执行什么标准操作?

更新:

添加到索引,然后标记为已合并 ->pull仍然无法通过。
当我选择合并时,我会得到对话框

enter image description here

由于该文件不在更改文件列表中,我无法提交该文件。


2
你是否通过上下文菜单执行了“添加到索引”操作,这类似于CVS / SVN中的“标记为合并”操作?然后我认为你需要进行提交以执行合并提交(据我所知),当你执行了merge操作时,或者如果你执行了rebase操作,则应该执行Rebase>continue而不是提交,这将执行你当前合并的提交并将下一个提交进行变基,如果有更多提交需要变基。 - Bertram Nudelbach
我不能随便退出状态。我走错了路径,EGit也没有帮助我退出。 - Paul Verest
好的,那个对话框是我最不喜欢的之一 - 不开玩笑。只需选择任何选项,因为我不确定它是否重要。但之后请提交文件,然后执行拉取操作。这样问题就解决了吗? 因为这样你应该能够通过合并工具解决冲突,而不会看到这个对话框。 - Bertram Nudelbach
2
我制作了一个视频,展示了如何通常避免这个冲突对话框:http://youtu.be/YjVLGMlHJPk。你尝试过那么做吗?然后你可以发布`git status的输出,或者显示git staging view`的截图,或者两者都可以。 - Bertram Nudelbach
10个回答

60

情况:

  • 您有本地未提交的更改
  • 您从主仓库pull
  • 出现错误“与文件xy的检查冲突”

解决方案:

  • 暂存并提交(至少)文件xy
  • 再次pull
  • 如果可以自动合并,则一切正常。
  • 如果不能自动合并,pull将合并文件并插入合并冲突标记(<<<<<<,>>>>):
    • 手动编辑有冲突的文件
  • 提交并推送

4
关于“stash”,也许值得添加一条评论? - Christoph

29
这是我解决问题的方法:
  1. 右键单击本地存在未提交更改的文件夹
  2. 点击“Team”>“Advanced”>“Assume Unchanged”
  3. Pull from master。

更新:

正如Hugo Zuleta所指出的,应该小心使用此方法。他说可能会显示分支已经是最新的,但是更改并没有显示,导致与分支不同步。


1
使用这个时必须小心。它可能会显示分支是最新的,但更改并没有显示出来,导致与分支不同步。 - Hugo M. Zuleta
1
从未想过这样的危险,是的,你说得对。我最好更新我的答案并加入这些信息。 - Burak Karakuş
如何使EGit重新同步并找到那些更改? - Paul Verest
抱歉 @PaulVerest,不知道如何做那个。:/ - Burak Karakuş

24
  1. 关闭冲突错误对话框后,从“项目资源管理器”中右键单击项目名称 -> “团队” -> “贮藏” -> “贮藏变更”
  2. 为您的贮藏命名。例如:“冲突”
  3. 再次进行拉取操作。希望这次不会出现错误。
  4. 从Git仓库视图中展开您的仓库 -> 贮藏提交
  5. 右键单击步骤2中创建的贮藏 -> 应用贮藏的变更
  6. 如果无法自动合并,则会弹出合并工具。
  7. 手动解决文件中的合并冲突。
  8. 右键单击文件编辑器 -> 团队 -> 添加到索引
  9. 如果您未准备好提交该文件或仅想将其从索引中删除,请右键单击文件编辑器 -> 团队 -> 从索引中移除。
  10. 清理:从Git仓库视图中,右键单击步骤2中创建的贮藏 -> 删除贮藏提交

您的本地工作目录文件应该已经合并了。


4
第5步完成后,我收到了以下消息: 出现问题: 从暂存提交“......”应用更改时遇到问题。 由于“应用暂存更改导致冲突”,因此未能应用暂存提交“....”中的更改。 这是一个没用的工具...根本没有合并对话框,只有愚蠢的消息。 - razor

1
如果出现“.settings/language.settings.xml”或任何类似文件的错误,您不需要使用git。
  1. 团队->提交->已暂存文件列表,检查是否存在不需要的文件,->右键单击每个文件->从索引中删除。
  2. 从未暂存文件列表中,检查是否存在不需要的文件,->右键单击每个文件->忽略。
现在,如果已暂存文件列表为空,并且未暂存文件列表中的所有文件都标记为已忽略,则可以进行拉取。否则,请按照其他答案操作。

0
我想最好的方法是这样的:
  1. 将所有更改存储在单独的分支中。
  2. 然后在本地主分支上执行硬重置。
  3. 然后从本地创建的分支合并回您的更改
  4. 然后提交并推送您的更改。
每当我遇到这种情况时,我都是这样解决的。

0

在Eclipse中遇到了CheckoutConflictException异常后,Eclipse-Merge工具按钮将被禁用。

Git需要将您的所有文件添加到索引中以启用合并。

因此,要合并您的更改并提交它们,您需要先将文件添加到索引中"Add to Index",然后"Commit"而不"Push"。 然后你应该在Eclipse中看到一个挂起的拉取请求和一个挂起的推送请求。你可以在一个向上箭头和一个向下箭头中看到它。

如果所有冲突文件都在提交中,您可以再次"pull"。然后你会看到像这样的东西:

\< < < < < < < HEAD 服务器版本 \======= 本地版本 > > > > > > > ....git分支'master'

然后,您可以使用现在启用的Merge-Tool更改它,或者直接在文件中手动执行合并。在最后一步中,您必须再次将修改后的文件添加到索引中,并"Commit and Push"它们。

检查完成!


0

正确的解决方案是由@Jojo.Lechelt提供的。

但是,如果出于任何原因您不想提交并仍然想拉取更改,则可以将更改保存在其他地方,用HEAD修订版替换冲突文件,然后拉取。

稍后,您可以再次粘贴您的更改,并将其与HEAD进行比较,并将其他人的更改合并到您的文件中。


0

右键单击项目,选择 [替换为] -> 头部修订版。现在选择在当前分支中拉取更改或从上游拉取更改。


0

我对这个问题有完全不同的经验。

当我拉取代码时(我的暂存区是干净的!),我看到了很多文件在拉取后出现在暂存区,这些文件我没有更改或添加。所以我再次用HEAD替换暂存区来清理它。再次尝试拉取时,我又遇到了同样的问题,这一次我做了以下操作:

  • 储藏更改
  • 关闭仓库中其他程序打开的任何文件
  • 尝试拉取

希望这能解决你的问题。

谢谢


0
在Eclipse中:
  1. 右键单击-> 点击“添加到索引”

将冲突文件添加到暂存区

  1. 右键单击->点击提交

将冲突文件添加到本地存储库

  1. 拉取

您将获得所有更改(远程存储库和本地存储库中的更改)

标头中提到的更改(<<<<<<< HEAD)是您的更改,分支中提到的更改(>>>>>> branch)是其他人的更改,您可以相应地更新文件。

  1. 右键单击-> 点击“添加到索引”

  2. 右键单击->提交并推送


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接