我在向github仓库推送代码时收到了这个消息。 你能告诉我一步一步的解决方法吗? 我只推送过一次,那时是成功的。 但是,当我更新了项目并尝试推送第二次提交时,它显示“主线拒绝非快进”并且不允许我推送。 请解释一下步骤。
我曾经遇到过同样的问题,并且已经解决了。Afk5min是正确的,问题在于你拉取代码的分支在远程仓库上已经发生了改变。根据标准的git实践(http://git-scm.com/book/en/Git-Basics-Working-with-Remotes),你需要(现在)将这些更改合并到本地更改中,然后再提交。这很有道理,它强制你接受别人的更改并将它们合并到你的代码中,确保你的代码在其他更改的情况下继续正常运行。
接下来步骤如下:
配置'fetch'以获取最初拉取的分支。
获取远程分支。
将远程分支合并到您的本地分支。
在本地存储库中提交(合并)更改。
将更改推送到远程存储库。
详细步骤如下:
在Eclipse中打开“Git Repositories”视图。
确保你可以看到你的本地仓库,并且可以将远程仓库作为子文件夹查看。在我的版本中,它被称为Remotes,然后我可以在其中看到远程项目。
查找指向左侧的绿色箭头,这是“fetch”箭头。右键单击并选择“Configure Fetch”。
你应该能看到URI,请确保它指向远程仓库。
查看弹出窗口中的引用映射部分。我的是空的。这将指示您要获取哪些远程引用。点击“添加”。
键入需要从远程仓库获取的分支名称。我的是'master'(顺便说一下,在此处下拉菜单将非常好!,现在,你必须手动输入)。继续进行弹出窗口,最终点击“完成”。
点击“保存并获取”。这将获取远程参考。
在本地存储库的“分支”文件夹中查看。现在您应该能在远程文件夹中看到该远程分支。同样,我看到的是 'master'。
右键单击“分支”文件夹中命名为“master”的本地分支。选择“合并”,然后选择名为“origin/master”的远程分支。
处理合并过程。
提交任何更改到本地存储库。
将更改推送到远程存储库。
恭喜你,去享受美味的饮料吧!今天可以休息了。
在我的情况下,我选择了推送时的Force Update
复选框。它表现得非常出色。
与此同时(当您更新项目时),其他提交已经被推送到“主”分支。因此,您必须先拉取这些更改才能推送您的更改。
适用于Eclipse Luna和Eclipse Git 3.6.1
我:
但是我遇到了EGit的问题,以下是我解决问题的方法。
是的,在我提交更改之前有人已经提交了更改。所以这些更改被拒绝了。
在出现此错误后,更改实际上被提交到了本地存储库。
我不想仅仅进行Pull
更改,因为我想保持线性历史记录
,正如在哪些情况下`git pull`可能会有害?中指出的那样。
所以,我执行了以下步骤:
从Git仓库的角度,右键单击相关的Git项目。选择Fetch from Upstream
- 它会获取远程更新(ref和对象),但不会在本地进行更新。更多信息请参见git pull和git fetch有什么区别?。然后选择Rebase...
- 这会打开一个弹出窗口,在其中点击Preserve merges during rebase
,了解原因请参见git的rebase --preserve-merges的作用是什么(以及为什么)?。 接着点击Rebase
按钮。如果存在冲突,请执行步骤6,否则执行步骤11。会出现一个名为Rebase Result
的弹出窗口,请单击OK
。此时将打开文件比较器,您需要修改左侧的文件。一旦正确合并更改,转到Git Staging
视图。将更改加入索引即stage the changes
。在同一视图中,单击Rebase
->Continue
。重复7到10,直到解决所有冲突。从History
视图中,选择您的提交行并选择Push Commit
。选择Rebase Commits of local.......
复选框并单击下一步。了解原因请参见Git:从上游重新基于开发分支。最后单击Finish
按钮。
注意: 如果您有多个本地仓库提交,请将它们压缩成一个提交以避免多个合并。配置 当您推送代码时,如果收到拒绝消息,请单击“配置”并单击“添加规范”,如此图所示
打开 Git 视图:
1- 选择您的项目并选择合并 2- 选择远程跟踪 3- 点击确定
Git 将会将远程分支与本地仓库合并
4- 然后推送
在我的情况下,我忘记从git拉取新的更改。