Egit拒绝非快进


88

我在推送到github存储库时收到此消息。您能告诉我逐步解决问题的方法吗?我只推了一次,就成功了。但是,当我更新项目并尝试推送第二次提交时,它显示“主拒绝非快速转发”,并且不允许我推送。请说明程序。


使用“使用README初始化此存储库”创建新的存储库后,我遇到了同样的问题。我删除了那个,然后在没有此复选框的情况下再次创建了一个。
andrew

@andrew是对的
Dany Wehbe

Answers:


224

我遇到了同样的问题,并且能够解决它。afk5min是正确的,问题出在远程存储库上,您从中提取代码的分支已经更改。按照标准的git做法(http://git-scm.com/book/en/Git-Basics-Working-with-Remotes),您需要(现在)将远程存储库中的更改合并到本地更改中,然后再进行操作可以提交。这是有道理的,这迫使您进行他人的更改并将其合并到您的代码中,以确保您的代码在其他更改就位的情况下继续起作用。

无论如何,继续执行步骤。

  1. 配置“提取”以提取最初从中提取的分支。

  2. 获取远程分支。

  3. 将该远程分支合并到本地分支。

  4. 在您的本地仓库中提交(合并)更改。

  5. 将更改推送到远程仓库。

详细地...

  1. 在eclipse中,打开“ Git存储库”视图。

  2. 确保您看到本地存储库,并且可以将远程存储库视为子文件夹。在我的版本中,它称为远程,然后我可以看到其中的远程项目。

  3. 查找指向左侧的绿色箭头,这是“获取”箭头。右键单击并选择“配置获取”。

  4. 您应该看到URI,确保它指向远程存储库。

  5. 查看弹出窗口的ref映射部分。我的是空的。这将指示您要获取的远程引用。点击“添加”。

  6. 输入您需要从远程存储库获取的分支名称。我的是“主人”(顺便说一句,这里的下拉列表会很棒!!,现在,您必须输入它)。继续执行弹出窗口,最后单击“完成”。

  7. 点击“保存并提取”。这将获取该远程引用。

  8. 在本地存储库的“分支”文件夹中查找。现在,您应该在远程文件夹中看到该远程分支。我再次看到“主人”。

  9. 右键单击“分支”的“本地”文件夹中的本地分支,该文件夹名为“ master”。选择“合并”,然后选择名为“源/主”的远程分支。

  10. 通过合并过程。

  11. 提交对本地存储库的任何更改。

  12. 将您的更改推送到远程存储库。

  13. 去喝一杯可口的饮料,祝贺自己。休息一天。


7
这应该被标记为答案。像魅力一样工作。即使我在Eclipse上为我的项目在GitHub上创建存储库时未添加任何文件(通常的README文件),也会出现此问题。非常感谢您轻松进行循序渐进的讲解。
rbaleksandar 2014年

这个问题花了我一年的时间进行整理,直到我读完您的帖子。就我而言,我没有远程服务器,但是Eclipse创建了一个默认的“ origin”服务器。
Eugene van der Merwe 2014年

很好,最后我可以与Eclipse合并。这里的关键点是使用Git Repositories视图进行合并,而不是通常的Team Synchronize视图。如果在团队同步视图中eGit可以禁用所有不执行任何操作的选项,那就太好了。
丹·卡特

1
尽管这样做确实可行,但会创建不必要的合并提交。您应该在此处使用rebase,这很好,因为您的更改仅是本地的,因此您不会更改任何已发布的历史记录(如果这样做,git会对您大声疾呼,要求进行非快进推送)。我喜欢MYN的回答。
nyuszika7h,2015年

右键单击项目,然后Merge在主项目中单击鼠标,然后再次右键单击push branch Master工作的项目
user1207289

17

就我而言,我Force Update在推动时选择了该复选框。它像魅力一样运作。


这也对我有用。在“修改”提交后,我具有OP的条件。取回给了我“没什么
可取的

11

同时(在更新项目时),其他提交已提交给'master'分支。因此,您必须先拉那些更改,然后才能推您的更改。


3
在这种情况下,git非常愚蠢,我将所有更改都推送到了远程。我是该项目上唯一的作品。为什么在地球上我需要先拉遥控器才能再次按下?所做的更改将来自我的本地人
Junjun Liu

7

适用于Eclipse Luna + Eclipse Git 3.6.1

一世,

  1. 克隆的git仓库
  2. 对源代码进行了一些更改
  3. 从Git暂存视图进行阶段更改
  4. 最后,提交并推送!

我在EGit上遇到了这个问题,这就是我如何解决的问题。

是的,有人在我提交更改之前提交了更改。因此,更改被拒绝。发生此错误后,更改实际上将提交到本地存储库。我不想仅仅Pull进行更改,因为我想linear history按照-中的指示进行维护- 在什么情况下`git pull`可能有害?

因此,我执行了以下步骤

  1. 从Git存储库的角度来看,右键单击相关的Git
    项目
  2. 选择Fetch from Upstream-它获取远程更新(引用和对象),但本地不进行任何更新。有关更多信息,请参考“ git pull”和“ git fetch”之间的区别什么?
  3. 选择Rebase...-这将打开一个弹出窗口,单击以Preserve merges during rebase查看为什么
    git的“ rebase --preserve-merges”到底做了什么(为什么?)
  4. 点击 Rebase button
  5. 如果存在/ conflict(s),则转到步骤6,否则转到步骤11
  6. Rebase Result会出现一个弹出窗口,只需单击OK
  7. file comparator将打开,您需要进行修改left side file
  8. 正确合并更改后,转到Git Staging视图
  9. stage the changes。即add to index
  10. 在同一视图上,单击Rebase-> Continue。重复7到10,直到解决所有冲突。
  11. History视图中,选择您的提交行,然后选择Push Commit
  12. 选择Rebase Commits of local.......复选框,然后单击下一步。请参阅原因-Git:从上游重新部署到开发分支
  13. 点击 Finish

注意:如果您有多个本地存储库提交,则需要将它们压缩在一个提交中,以避免多次合并。


我同意使用rebase而不是merge。最好不要创建不必要的合并提交。(主题外:Stack Overflow完全荒谬,仅基于我最初写“ +1 for”这一事实就拒绝了我的评论。我的评论非常有建设性,谢谢。)
nyuszika7h 2015年


3

打开git视图:

1-选择您的项目并选择合并2-选择远程跟踪3-单击确定

Git会将远程分支与本地存储库合并

4-然后推


1

此错误意味着远程存储库还进行了其他提交,并且进度超过了本地分支机构。
我尝试先进行git pull,再进行git push。如果它们没有冲突的更改,则git pull将最新的代码获取到我的本地分支,同时保持更改不变。
然后git push将我的更改推送到master分支。


似乎很多人都错过了这个简单的解决方法:D
黑色

0

我发现您必须在git的最新提交上。因此,这些是要采取的步骤:1)确保尚未处理相同的文件,否则会遇到DITY_WORK_TREE错误。2)拉最新更改。3)提交您的更新。

希望这可以帮助。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.