Egit拒绝非快进

时间:2013-10-20 05:17:48

标签: eclipse github egit

我在推送到github存储库时收到此消息。你能告诉我一步一步修复它吗?我只推了一次就成功了。但是,当我更新一个项目并尝试推送我的第二次提交时,它显示“主人拒绝非快进”并且不允许我推送。请解释一下程序。

9 个答案:

答案 0 :(得分:212)

我有同样的问题,我能够解决它。 afk5min是对的,问题是你从远程存储库上更改了你从中提取代码的分支。根据标准的git实践(http://git-scm.com/book/en/Git-Basics-Working-with-Remotes),您需要(现在)在提交之前将远程存储库中的这些更改合并到本地更改中。这是有道理的,这会强制您进行其他更改并将它们合并到您的代码中,从而确保您的代码能够继续使用其他更改。

无论如何,继续步骤。

  1. 配置'fetch'以获取您最初从中提取的分支。

  2. 获取远程分支。

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

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

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

  6. 详细......

    1. 在eclipse中,打开视图'Git Repositories'。

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

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

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

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

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

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

    8. 查看本地存储库的“Branches”文件夹。您现在应该在远程文件夹中看到远程分支。再一次,我看到'大师'。

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

    10. 通过合并进行处理。

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

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

    13. 去喝一杯美味的饮料,祝贺你自己。休息一天。

答案 1 :(得分:14)

在我的情况下,我在推送时选择了Force Update复选框。它就像一个魅力。

答案 2 :(得分:10)

与此同时(当您更新项目时),已经对“主”分支进行了其他提交。因此,您必须先提取这些更改才能推送更改。

答案 3 :(得分:6)

适用于Eclipse Luna + Eclipse Git 3.6.1

I,

  1. 克隆的git存储库
  2. 对源代码进行了一些更改
  3. 从Git Staging View暂存更改
  4. 最后,提交并推送!
  5. 我用EGit面对这个问题,这就是我修复它的方法..

    是的,有人在我提交更改之前提交了更改。所以这些变化被拒绝了。 发生此错误后,更改实际上已提交到本地存储库。 我不想只是Pull这些更改,因为我想按照In what cases could `git pull` be harmful?

    中的指示维护linear history

    所以,我执行了以下步骤

    1. 从Git Repository的角度来看,右键点击相关的Git
      项目
    2. 选择Fetch from Upstream - 它会获取远程更新(引用和对象),但不会在本地进行更新。有关详细信息,请参阅What is the difference between 'git pull' and 'git fetch'?
    3. 选择Rebase... - 这会打开一个弹出窗口,点击Preserve merges during rebase查看原因
      What exactly does git's "rebase --preserve-merges" do (and why?)
    4. 点击Rebase button
    5. 如果有conflict(s),请转到步骤6,否则执行步骤11
    6. 会出现Rebase Result弹出窗口,只需点击OK
    7. 即可
    8. file comparator会打开,您需要修改left side file
    9. 完成正确合并更改后,转到Git Staging查看
    10. stage the changes。即add to index
    11. 在同一视图中,点击Rebase - > Continue。重复7到10,直到所有冲突得到解决。
    12. History视图中,选择您的提交行并选择Push Commit
    13. 选中Rebase Commits of local.......复选框,然后点击下一步。参考原因 - Git: rebase onto development branch from upstream
    14. 点击Finish
    15. 注意:如果您有多个本地存储库提交,则需要在一次提交中压缩它们以避免多次合并。

答案 4 :(得分:3)

打开git视图:

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

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

合并

4-然后按

答案 5 :(得分:2)

Configure 在收到拒绝消息后推送代码后,单击配置,然后单击添加规格,如图所示

Source ref and Destination ref 下拉并单击ref / heads / yourbranchname,然后再次单击Add Spec

enter image description here 确保选择强制更新

enter image description here 最后保存并将代码推送到仓库中

答案 6 :(得分:1)

此错误表示远程存储库已经有其他提交,并且已经超出了您的本地分支 我尝试做一个git pull然后是git push。如果它们没有冲突的变化,git pull会将最新的代码发送到我的本地分支,同时保持我的更改完好无损 然后git push将我的更改推送到主分支。

答案 7 :(得分:0)

我发现你必须是最新的git提交。 所以这些是采取的步骤: 1)确保您没有处理相同的文件,否则您将遇到DITY_WORK_TREE错误。 2)拉最新的变化。 3)提交您的更新。

希望这有帮助。

答案 8 :(得分:-1)

  1. 进入Github,为您的新代码创建一个回购。
  2. 当您向上游推送时,在Eclise中使用新的https或ssh网址;