137

在尝试第一次 Github 推送时出现以下错误:

[rejected] master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:me/me.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'non-fast forward'
section of 'git push --help' for details.

我该如何解决这个问题并合并远程更改?

4

7 回答 7

107

有关详细信息,请参阅“ git push --help ”的“非快进”部分。

你可以执行“git pull”,解决潜在的冲突,然后“git push”结果。“git pull”将在提交 A 和 B 之间创建合并提交 C。

或者,您可以使用“git pull --rebase”在 A 之上重新调整 X 和 B 之间的更改,然后将结果推回。rebase 将创建一个新的提交 D,它在 A 之上构建 X 和 B 之间的更改。

于 2009-11-11T05:11:39.263 回答
87

您还可以通过在分支名称前添加 + 符号来强制推送。

git push origin +some_branch
于 2012-03-09T05:40:26.667 回答
20

您可能在 github 上有从未合并过的更改。尝试git pull获取并合并更改,然后您应该可以推送。对不起,如果我误解了你的问题。

于 2009-11-11T05:06:08.870 回答
13

如果您“git pull”并且它显示“Already up-to-date。”,但仍然出现此错误,可能是因为您的其他分支之一不是最新的。在再次尝试“git push”之前尝试切换到另一个分支并确保一个也是最新的:

切换到分支“foo”并更新它:

$ git checkout foo
$ git pull

您可以通过发出命令查看您拥有的分支:

$ git branch
于 2012-05-02T22:42:22.673 回答
7

您可以强制它推动,但请仅在您非常确定自己在做什么时才这样做。

命令是:

git push -f 
于 2013-04-22T07:50:22.070 回答
3

当您有冲突的标签时,也会出现此问题。如果你的本地版本和远程版本对不同的提交使用相同的标签名称,你可以在这里结束。

您可以通过删除本地标签来解决它:

$ git tag --delete foo_tag
于 2012-06-04T11:24:44.767 回答
2

当我收到这个错误时,我备份了我的整个项目文件夹。然后我做了类似的事情

$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master

...取决于您的分支名称(如果它不是主分支)。

然后我做到了git pull --rebase。之后,我用我备份的项目文件替换了拉取的文件。现在我准备再次提交我的更改并推送。

于 2012-07-22T01:22:56.127 回答