283

我正在尝试推送我的项目(新存储库中的所有文件)。我按照这些步骤进行操作,但是当我推动时出现git push -u origin master此错误:

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

我多次收到此错误,无法弄清楚该怎么做。

4

21 回答 21

226

注意:这绝不是 git 的推荐用法。这将覆盖遥控器上的更改。仅当您 100% 知道应将本地更改推送到远程主机时才执行此操作。

⚠️试试这个:git push -f origin master

于 2013-05-04T12:59:15.373 回答
196

正如错误消息所说:git pull在你尝试之前git push。显然您的本地分支与您的跟踪分支不同步。

根据项目规则和您的工作流程,您可能还想使用git pull --rebase.

于 2012-07-27T22:25:27.557 回答
16

我刚刚收到此错误。

我在创建本地 git 存储库后创建了一个 github 存储库,因此我需要在推送到 github 之前接受对本地的更改。在这种情况下,唯一的变化是创建 github 存储库时作为可选步骤创建的自述文件。

git pull https://github.com/*username*/*repository*.git master

存储库 URL 是从项目 github 页面上的此处获取的:

在此处输入图像描述

然后我重新初始化(这可能不需要)

git init
git add .
git commit -m "update"

然后推:

git push
于 2013-12-13T23:52:45.603 回答
10

如果git pull没有帮助,那么您可能已经推送了您的更改(A),之后又git commit --amend添加了一些更改(B)。因此,git 认为您可能会丢失历史记录 - 尽管 B 包含来自 A 的所有更改,但它会将 B 解释为不同的提交。

             B
            /
        ---X---A

如果之后没有人更改 repo A,那么您可以这样做git push --force

A但是,如果在其他人之后有更改:

             B
            /
        ---X---A---C

那么您必须将人员从更改ABC-> D)。

             B---D
            /
        ---X---A---C

或手动解决问题。我还没想好怎么做。

于 2014-04-30T09:05:07.003 回答
10

使用这个命令:

git pull --allow-unrelated-histories <nick name of repository> <branch name>

像:

git pull --allow-unrelated-histories origin master

当项目没有任何共同祖先时会发生此错误。

于 2016-09-16T15:12:24.777 回答
9

我在 github 中创建了新的 repo,我遇到了同样的问题,但是在拉取时也有问题,所以这对我有用。

但是在已经有很多代码的仓库中不建议这样做,因为这可能会搞砸一切

git push origin master --force
于 2015-12-07T09:55:00.007 回答
9

警告:

寻求“ git pull”并不总是一个解决方案,所以要小心。如果您有意更改了存储库历史记录,您可能会遇到这个问题(Q 中提到的问题)。在这种情况下,git 会将您的历史更改与远程存储库中的新更改混淆。因此,您应该选择git push --force,因为调用git pull会故意撤消您对历史记录所做的所有更改。

于 2016-09-15T12:45:06.460 回答
7

这是因为您在 master 中做了一些更改,所以项目要求您先拉取。如果你想推它,你可以通过输入以下内容来使用蛮力:

git push -f origin master

请记住首先提交您的更改:

git add .
git commit -m "Your commit message"
于 2018-03-20T16:55:09.740 回答
5

试试这个命令:“git pull origin master”

它对我有用。

检查此链接:https ://help.github.com/articles/dealing-with-non-fast-forward-errors

于 2014-03-25T15:10:49.807 回答
4

你需要做

git branch

如果输出类似于:

* (no branch)
master

然后做

git checkout master

确保您没有任何待处理的提交,因为签出将丢失所有未提交的更改。

于 2013-09-03T21:04:18.930 回答
4

![拒绝] master -> master(非快进)

不要惊慌,这非常容易解决。您所要做的就是发出拉动,您的分支将快进:

$ git pull myrepo master

然后重试你的推送,一切都应该没问题:

$ git push github 大师

于 2014-02-10T11:52:09.233 回答
4

当我在开发分支上并且我的主分支没有最新更新时,这发生在我身上。

因此,当我尝试从开发分支进行 git push 时,我遇到了该错误。

我通过切换到 master 分支,git pull 来修复它,然后回到开发分支和 git push。

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push
于 2016-08-17T18:17:21.460 回答
4

我的遥控器与本地不同步,所以这对我有用

git pull --rebase

并确保当你git pull再次这样做时,它应该说已经是最新的,现在你准备好推送到原点了

假设你已经git remote add origin remote repository URL

git push origin master

截图说明了一切 在此处输入图像描述

或者你可以这样做

  1. git stash(临时存储未提交的工作)
  2. git pull(使本地和远程同步)
  3. git stash pop(取回未提交的更改)
  4. git 推送
于 2019-03-06T04:02:41.780 回答
3

我在开发机器上遇到了这个问题。dev树枝推得很好,但树枝master给了我(在git push树枝上时dev):

! [rejected]        master -> master (non-fast-forward)

所以我尝试了:

git checkout master
git pull

这给了我:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

我发现 master 分支丢失.git/config并添加:

[branch "master"]
    remote = origin
    merge = refs/heads/master

之后在分支git push上也工作得很好。dev

于 2014-09-03T13:10:07.033 回答
1

我有同样的问题。我使用 Git Totoise。只需右键单击 -> TotoiseGit -> 清理。现在你可以推送到 Github 它对我来说很好:D

于 2014-12-22T12:39:26.633 回答
1

这是因为您对其主节点进行了冲突更改。而你的存储服务器无法用这些话告诉你,所以它给出了这个错误,因为这不是他为你处理这些冲突的问题,所以他要求你自己做。作为 ?

1-git pull 这会将您的代码从您的存储库合并到您的站点主代码。因此显示了冲突。

2-处理这些手动冲突。

3-

git push origin master

很快,你的问题已经解决了。

于 2016-04-04T19:51:46.997 回答
1

这也可能是由于在为 Repo 命名时引起的一些名称错误引起的。如果上述任何答案都不起作用。这对我有用:

删除该存储库并创建一个新存储库,然后再次尝试以下命令:

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

如果添加原点显示已经存在,请改用:

git remote set-url origin *your_git_name.git*
于 2020-03-29T07:58:34.427 回答
0

我唯一能够解决此问题的是删除本地和 git repo 并在两端再次创建相同的。现在工作正常。

于 2013-03-26T04:27:39.470 回答
0

如果有人在尝试推送到 heroku 时遇到此错误,那么只需将 'origin' 替换为 'heroku',如下所示: git push -f heroku master

于 2019-03-11T00:11:53.470 回答
0

试试这个,在我的情况下它有效

git rebase --abort

于 2020-03-20T18:29:06.487 回答
0

我也遇到了同样的错误,但我通过获取它的 URL 轻松解决了它

git fetch origin Your repository origin

然后只需应用命令

git push -f origin master

你会得到一个好的结果

于 2021-10-02T05:57:50.753 回答