我正在尝试推送我的项目(所有文件都在新的存储库中)。我按照步骤操作,但当我按下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.
我多次遇到此错误,无法弄清楚该怎么做。
答案 0 :(得分:129)
在您尝试git pull
之前,错误消息显示为:git push
。显然,您的本地分支机构与您的跟踪分支机构不同步。
根据项目规则和工作流程,您可能还想使用git pull --rebase
。
答案 1 :(得分:120)
试试这个:git push -f origin master
答案 2 :(得分:14)
git push -f origin master
使用蛮力;-) 您最有可能尝试添加在git上创建存储库之前创建的本地文件夹。
答案 3 :(得分:12)
此命令对我来说效果很好
git push -f origin master
答案 4 :(得分:11)
我刚刚收到此错误。
我在创建了我的本地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
答案 5 :(得分:7)
我在github上创建了新的repo并且我遇到了同样的问题,但是在拉动时它也有问题,所以这对我有用。
但在repos中不建议这已经有很多代码 可能搞乱一切
git push origin master --force
答案 6 :(得分:6)
如果git pull
无效,那么您可能已推送了更改(A),之后使用git commit --amend
添加了更多更改(B)。因此,git认为您可以丢失历史记录 - 它将B解释为不同的提交,尽管它包含来自A的所有更改。
B
/
---X---A
如果没有人在A
之后更改回购,那么您可以执行git push --force
。
但是,如果其他人A
之后发生了变化:
B
/
---X---A---C
然后你必须将那些人从A
更改为B
(C
- > D
)。
B---D
/
---X---A---C
或手动修复问题。我还没想到怎么做。
答案 7 :(得分:5)
警告:
去寻找一个' git pull'并不总是一个解决方案。如果您故意更改了存储库历史记录,则可能会遇到此问题(Q中提到的问题)。在这种情况下,git会将您的历史记录更改与远程仓库中的新更改混淆。因此,您应该选择git push --force
,因为调用git pull
会故意撤消您对历史记录所做的所有更改。
答案 8 :(得分:5)
使用此命令:
git pull --allow-unrelated-histories <nick name of repository> <branch name>
像:
git pull --allow-unrelated-histories origin master
当项目没有任何共同的祖先时会发生此错误。
答案 9 :(得分:4)
! [拒绝]主人 - &gt;主人(非快进)
不要惊慌,这很容易修复。所有你需要做的就是发出一个拉动,你的分支将是快进的:
$ git pull myrepo master
然后重试你的推动,一切都应该没问题:
$ git push github master
答案 10 :(得分:4)
尝试此命令:“git pull origin master”
它对我有用。
点击此链接:https://help.github.com/articles/dealing-with-non-fast-forward-errors
答案 11 :(得分:3)
你需要做
git branch
如果输出类似于:
* (no branch)
master
然后做
git checkout master
确保您没有任何待处理的提交,因为签出将丢失所有未提交的更改。
答案 12 :(得分:3)
当我在开发分支上时,发生了这种情况,我的主分支没有最新的更新。
所以当我尝试从开发分支git push时,我遇到了这个错误。
我通过切换到master分支,git pull修复它,然后返回开发分支和git push。
$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push
答案 13 :(得分:3)
这是因为您在主人中做了一些更改,因此项目要求您先拉。无论如何你想推它,你可以输入以下信息来使用蛮力:
git push -f origin master
请记住先提交更改:
git add .
git commit -m "Your commit message"
答案 14 :(得分:2)
我在开发机器上遇到了这个问题。 dev
分支正在推进,但是
master
分支给了我(在git push
分支时dev
时:{/ p>
! [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.
我发现.git/config
中缺少主分支并添加了:
[branch "master"]
remote = origin
merge = refs/heads/master
之后git push
在dev
分支上工作正常。
答案 15 :(得分:1)
这也可能是由于给仓库指定名称时出现名称错误引起的。 如果以上任何一个答案都没有用,对我有用:
删除该存储库并创建一个新的存储库,然后再次尝试以下命令:
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*
答案 16 :(得分:0)
尝试一下,就我而言,它可行
git rebase --abort
答案 17 :(得分:0)
这是因为您对其主人进行了相互冲突的更改。并且您的存储库服务器无法通过这些单词告诉您,因此它会出现此错误,因为这不是他处理这些冲突的问题,因此他要求您自己执行此操作。作为?
1- git pull
这会将您的存储库中的代码合并到站点主机的代码中。
因此显示了冲突。
2-对待这些手段冲突。
3-
git push origin master
而且,你的问题已经解决了。
答案 18 :(得分:0)
如果有人在尝试推送到heroku时遇到此错误,则只需将'origin'替换为'heroku' 像这样: git push -f heroku master
答案 19 :(得分:0)
我的遥控器与本地不同步,因此对我有用
git pull --rebase
,并确保当您再次执行git pull
时,应该说“已更新”
现在您可以开始尝试了
假设您已经git remote add origin remote repository URL
做
`git push origin master`
答案 20 :(得分:0)
我和问题一样。 我用Git Tortoise。 Just Right Click - &gt; TortoiseGit - &gt;清理 。 现在你可以推送到Github了 它对我很好:D
答案 21 :(得分:0)
唯一能够解决此问题的是删除本地和git repo并在两端再次创建相同的内容。现在工作正常。