99

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

4

10 回答 10

239

我有同样的问题,我能够解决它。afk5min 是对的,问题是您从中提取代码的分支已经在远程存储库上发生了变化。根据标准 git 实践(http://git-scm.com/book/en/Git-Basics-Working-with-Remotes),您需要(现在)将远程存储库中的这些更改合并到您的本地更改中可以提交。这是有道理的,这会迫使您接受其他人的更改并将它们合并到您的代码中,从而确保您的代码在其他更改到位的情况下继续运行。

无论如何,进入步骤。

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

  2. 获取远程分支。

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

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

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

详细地...

  1. 在 Eclipse 中,打开视图“Git Repositories”。

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

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

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

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

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

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

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

  9. 右键单击'Branches'的'Local'文件夹中的本地分支,命名为'master'。选择“Merge”,然后选择名为“origin/master”的远程分支。

  10. 通过合并处理。

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

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

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

于 2013-11-15T20:43:50.303 回答
19

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

于 2016-07-26T09:50:37.000 回答
12

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

于 2013-10-20T05:40:26.080 回答
7

适用于 Eclipse Luna + Eclipse Git 3.6.1

我,

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

我在 EGit 上遇到了这个问题,这就是我修复它的方法。

是的,有人在我提交更改之前提交了更改。所以更改被拒绝。在此错误之后,更改实际上已提交到本地存储库。我不想只Pull进行更改,因为我想linear history按照中指出的那样进行维护 -在什么情况下 `git pull` 会有害?

所以,我执行了以下步骤

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

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

于 2015-01-15T18:31:22.163 回答
4

配置 当您收到拒绝消息时推送代码后,单击配置并单击添加规范,如图所示

源参考和目标参考 下拉并单击 ref/heads/yourbranchname 并再次单击 Add Spec

在此处输入图像描述 确保选择强制更新

在此处输入图像描述 最后保存并将代码推送到仓库

于 2018-10-29T16:47:28.963 回答
3

打开 git 视图:

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

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

4-然后推

于 2014-12-20T20:06:55.837 回答
3

此错误意味着远程存储库有其他提交并且已经领先于您的本地分支。
我尝试做一个 git pull,然后是一个 git push。如果它们没有冲突的更改,则 git pull 将最新代码获取到我的本地分支,同时保持我的更改完好无损。
然后 git push 将我的更改推送到主分支。

于 2016-04-05T07:47:21.173 回答
0

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

希望这可以帮助。

于 2015-07-24T21:00:46.287 回答
0

就我而言,我忘了从 git 中提取新的更改

  1. 右键单击项目 Fetch From Upstream
  2. 右键项目拉取
  3. 右键单击项目推送到上游
于 2021-12-30T06:27:13.890 回答
-2
  1. 进入 Github 为你的新代码创建一个 repo。
  2. 推送到上游时,使用 Eclise 中的新 https 或 ssh url;
于 2016-03-23T09:15:56.163 回答