如何恢复由于与 Eclipse 和 EGit 合并而发生的更改

How to revert changes due to a merge with Eclipse and EGit

我正在使用 Eclipse Mars.1 (4.5.1) 和 EGit 4.1.0。

从一个分支合并到 master 后,我不知道如何通过简单地保留合并前 master 中的版本来告诉 EGit 解决冲突,而忽略由于以下原因进入该文件的任何内容合并。

这就是我所做的。我的 Java 项目都指向 master。任何项目中都没有未提交的更改。

在 Package Explorer 视图中,我右键单击一个项目,单击“团队”、“合并”。

在弹出的 "Merge 'master'" 对话框中,我 select 一个分支(在 "Local" 下),我将 "Merge options" 留在 "Commit" 和 "Fast forward options" 在 "If a fast-forward, only update the branch pointer".

我点击"Merge"。 "Merge Result" 对话框弹出并显示 "Result Conflicting"。公平地说,我期待着冲突,我将一一手动解决它们。

现在,我的问题是,对于一些冲突的文件,我想解决冲突的方式只是拒绝合并导致的对该文件的任何更改;只需保留该文件,就像我进行合并之前一样。 这应该是微不足道的(至少在 SVN 中是这样),但我在 Eclipse 中的任何地方都看不到如何做到这一点。合并已用“<<<<<<”冲突标记填充文件,我只是看不到需要做什么才能恢复这些更改 仅在该文件 中,以便该文件相对于 master 没有变化,这是所有项目指向的地方。

如果我在“同步”视图中右键单击文件并 select "Overwrite",系统会询问我是否 "want to overwrite local changes"。这正是我想要的,我希望文件没有本地更改,所以我单击是。但是结果是文件在本地被删除了,尽管它同时存在于 master 和 branch 中。它从 Package Explorer 中消失了,因为我也在编辑器中打开了它,所以该编辑器选项卡关闭了。这不是我所说的 "overwrite local changes" 的意思,我不明白为什么会这样。

如果不是 "Overwrite" I select "Mark as merged"(尽管冲突标记仍然存在),该文件不再显示为冲突,但它仍然具有所有其中有冲突标记,当然仍然显示为已更改,而我希望它相对于 master 保持不变。

如果相反,我解决了其他文件中的所有冲突,并且我想提交除有问题的文件之外的所有文件 - 这样那个文件将保持不变 - 当提交对话框出现并列出所有文件时提交,每个都有一个复选框,然后我单击有问题的文件的复选框以将其从提交中排除,该复选框不会被取消选中,这适用于任何其他文件;复选框看起来没有被禁用,但它们不响应点击。

我错过了什么?

我通过以下方式解决了这个问题。 我认为这不是正确的方法(如果有人知道,我仍然有兴趣听听)因为它涉及在两个不同的 Eclipse 视图之间切换,但至少这样做了对我来说是个把戏,这涉及 "Synchronize" 视图的唯一原因是当我右键单击冲突文件时,我在其他任何地方都找不到 "Mark as merged" 菜单项(在 "Git Staging" 查看也不在 Package Explorer 中)。

  • 打开 "Git Staging" 视图。冲突的文件显示在 "Unstaged Changes".

  • 其中,右键单击您只想还原合并产生的任何更改的那个,以便保持文件不变。然后select"Replace With / Ours".

  • 转到 "Synchronize" 视图,右键单击文件,标记为已合并。

  • 现在在 Package Explorer 中,文件应该显示为不冲突,只是未更改,因此它不会包含在提交中。

截至目前,签出 ours/theirs 仅适用于 EGit 暂存视图中的冲突文件