我在推送到 github 存储库时收到此消息。你能告诉我一步一步的过程来解决它吗?我只推了一次就成功了。但是,当我更新一个项目并尝试推送我的第二次提交时,它显示“主人拒绝非快进”并且不允许我推送。请说明程序。
10 回答
我有同样的问题,我能够解决它。afk5min 是对的,问题是您从中提取代码的分支已经在远程存储库上发生了变化。根据标准 git 实践(http://git-scm.com/book/en/Git-Basics-Working-with-Remotes),您需要(现在)将远程存储库中的这些更改合并到您的本地更改中可以提交。这是有道理的,这会迫使您接受其他人的更改并将它们合并到您的代码中,从而确保您的代码在其他更改到位的情况下继续运行。
无论如何,进入步骤。
配置“获取”以获取您最初从中提取的分支。
获取远程分支。
将该远程分支合并到您的本地分支。
在本地存储库中提交(合并)更改。
将更改推送到远程仓库。
详细地...
在 Eclipse 中,打开视图“Git Repositories”。
确保您看到本地存储库并且可以将远程存储库视为子文件夹。在我的版本中,它被称为 Remotes,然后我可以在其中看到远程项目。
寻找指向左侧的绿色箭头,这是“获取”箭头。右键单击并选择“配置提取”。
您应该看到 URI,确保它指向远程存储库。
查看弹出窗口的参考映射部分。我的是空的。这将指示您要获取哪些远程引用。点击“添加”。
输入您需要从远程存储库中获取的分支名称。我的是“大师”(顺便说一句,这里的下拉菜单会很棒!!,现在,你必须输入它)。继续弹出窗口,最终单击“完成”。
单击“保存并获取”。这将获取该远程引用。
查看本地存储库的“分支”文件夹。您现在应该在远程文件夹中看到该远程分支。再次,我看到了“主人”。
右键单击'Branches'的'Local'文件夹中的本地分支,命名为'master'。选择“Merge”,然后选择名为“origin/master”的远程分支。
通过合并处理。
提交对本地存储库的任何更改。
将您的更改推送到远程存储库。
去喝一杯可口的饮料,祝贺你自己。休息一天。
就我而言,我Force Update
在推动时选择了复选框。它就像一个魅力。
与此同时(当您更新项目时),其他提交已提交到“主”分支。因此,您必须先提取这些更改才能推送您的更改。
适用于 Eclipse Luna + Eclipse Git 3.6.1
我,
- 克隆的 git 存储库
- 对源代码进行了一些更改
- Git 暂存视图中的暂存更改
- 最后,提交并推送!
我在 EGit 上遇到了这个问题,这就是我修复它的方法。
是的,有人在我提交更改之前提交了更改。所以更改被拒绝。在此错误之后,更改实际上已提交到本地存储库。我不想只Pull
进行更改,因为我想linear history
按照中指出的那样进行维护 -在什么情况下 `git pull` 会有害?
所以,我执行了以下步骤
- 从 Git Repository 的角度来看,右键单击相关的 Git
项目 - select
Fetch from Upstream
- 它获取远程更新(引用和对象),但不进行本地更新。有关更多信息,请参阅“git pull”和“git fetch”有什么区别? - 选择
Rebase...
- 这会打开一个弹出窗口,点击Preserve merges during rebase
查看为什么
git 的“rebase --preserve-merges”到底做了什么(为什么?) - 点击
Rebase button
- 如果有 a
conflict(s)
,请转到第 6 步,否则转到第 11 步 - 将出现一个
Rebase Result
弹出窗口,只需单击OK
file comparator
会打开,你需要修改left side file
.- 正确完成合并更改后,转到
Git Staging
查看 stage the changes
. IEadd to index
- 在同一视图上,单击
Rebase
->Continue
。重复 7 到 10 直到所有冲突都解决。 - 从
History
视图中,选择您的提交行并选择Push Commit
- 选中
Rebase Commits of local.......
复选框并单击下一步。参考原因 - Git:从上游重新定位到开发分支 - 点击
Finish
注意:如果您有多个本地存储库提交,则需要在一次提交中压缩它们以避免多次合并。
配置 当您收到拒绝消息时推送代码后,单击配置并单击添加规范,如图所示
打开 git 视图:
1- 选择您的项目并选择合并 2- 选择远程跟踪 3- 单击确定
Git 会将远程分支与本地存储库合并
4-然后推
此错误意味着远程存储库有其他提交并且已经领先于您的本地分支。
我尝试做一个 git pull,然后是一个 git push。如果它们没有冲突的更改,则 git pull 将最新代码获取到我的本地分支,同时保持我的更改完好无损。
然后 git push 将我的更改推送到主分支。
我发现你必须在 git 的最新提交上。所以这些是要采取的步骤: 1) 确保您没有处理相同的文件,否则您将遇到 DITY_WORK_TREE 错误。2) 拉取最新的变化。3) 提交您的更新。
希望这可以帮助。
就我而言,我忘了从 git 中提取新的更改
- 右键单击项目 Fetch From Upstream
- 右键项目拉取
- 右键单击项目推送到上游
- 进入 Github 为你的新代码创建一个 repo。
- 推送到上游时,使用 Eclise 中的新 https 或 ssh url;