使用 egit 正确推送到修改后的远程存储库工作流

Proper push to modified remote repository workflow with egit

我正在尝试跳过我的影子,最终在基础水平上学习 git。就像我之前的无数初学者一样,在合并远程更改和 "marking as merged" 后尝试推送时,我 运行 遇到了可怕的 "egit rejected non-fast-forward" 错误。

看来我已经找到了这个问题的解决方案,但是它很麻烦并且与eclipse比较编辑器不兼容。我这样做:

  1. 推送我的更改 - 导致 "egit rejected non-fast-forward" 错误
  2. 拉动更改 - 比较编辑器现在包含 <、= 和 > 标记。我无法轻松地比较和推送更改,因为比较编辑器的右侧是空的,左侧包含我的更改和相互冲突的远程更改,这非常没用。
  3. 通过手动编辑文本痛苦地挑选我想要的部分。

我使用 egit 的方式正确吗?
有没有办法正确使用比较编辑器的两侧?

我想查看将被推送的我的版本,以及它在合并期间始终与当前远程版本的差异。

我不熟悉 egit,但听起来您正在处理合并冲突。我是否正确地假设其他人也可以推送访问您正在处理的分支?可能发生的情况是他们将新更改推送到分支,这就是导致拒绝的原因。通过拉动,您试图合并一些您必须解决的冲突更改。 Here 是对同一问题的更好解释。

坏消息是合并冲突总是需要手动解决。好消息是 egit 似乎提供了一个合并工具来解决这些冲突。 This egit wiki page 可能会帮助您找到您正在寻找的比较工具。基本上,只有 select 有冲突的文件,然后 select Team > Merge Tool .


如果这不起作用,您始终可以通过使用 git 合并标记(<、> 和 =)自信地解决合并冲突。 Read this 详细解释了如何在 Git 中使用它们。基本上,<<< 以下和 === 以上的内容都是您的更改。 === 以下和 >>> 以上的代码将是他们的更改。你要么必须选择你想要的那一边,要么你可以进一步定制它。通过删除所有内容并自己重新编写代码。

这是一个例子。这是您在解决合并冲突时可能会看到的内容。顶部向您显示本地 HEAD 的提交,即您的提交版本。 === 下方的底部显示了 origin/master 处的提交,即您刚刚引入的版本。

<<<<<< HEAD:test.html
<h1>This is my version</h1>
======
This is their version
>>>>>> origin/master:test.html

要只保留你的版本,你可以用这个替换整个块。这就像箭头和等号给你一个选择。你想要顶部(你的)还是底部(他们的)?

<h1>This is my version</h1>

或者,您可能需要两者的结合。在这里,您将保留 <h1> html 标签,但使用他们的文本。

<h1>This is their version</h1>

我希望这可以帮助您更轻松地解决合并冲突。如果你想了解更多Git,我总是推荐git-scm