拒绝主人->主人(非快进)


216

我正在尝试推送项目(所有文件都在新存储库中)。我按照步骤操作,但是当我按时出现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
如果您确定本地主服务器具有您要在远程服务器上进行的最新更改,请执行git push --force
IgorGanapolsky 2013年

34
git push --force <remote_repository>为我工作。
Sorter 2014年

@Sorter-我整天都遇到同样的问题,这对我有帮助!谢谢。但是,它没有提供关于问题首先发生的原因以及修复程序为何起作用的解释。
帕达旺2015年

1
@pmr,只是轻描淡写地问OP“读取错误消息”是否根本没有帮助。显然,该错误消息对OP没有任何意义,就像它对我或其他66位支持他的职位的人没有任何消息一样。狡猾,比人更聪明,根本无法帮助人们。
帕达万2015年

3
@Padawan您还将注意到,这个“比较狡猾,狡猾的人”为该问题提供了可接受的答案,有72人(可能包括您在内)认为它很有帮助。对不起,我的评论这么嚣张,但如果您在专业背景下也问过我,那将是我的第一个问题。有时停下来花一点时间仔细阅读错误消息有时会产生奇迹。当我第一次看到该错误时,我为我做了。
pmr 2015年

Answers:


160

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

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


1
它向我显示此自动合并README.md自动合并失败;解决冲突,然后提交结果。
Asantoya12年

1
@ Asantoya17在远程主服务器上进行的更改与您的更改冲突。查看文件并查看它们。然后提交解决结果。请获取教程或书籍,或者至少阅读消息。
pmr

1
拉是什么意思?使您能够从存储库的网站推送文件或获取和下载文件?(例如Bit Bucket)
David Dimalanta,

4
@AndrewS git push --force origin master。如果您一生中多次遇到此类问题,则项目工作流将中断。应该在分支中开发功能部件并合并它们,而不能进行快速转发;如果某个功能“失败”,则应还原合并提交(最好是在将功能部件合并到主部件之前先在集成分支中进行测试)。虽然不了解Eclipse。
2015年

1
如果报告错误,该怎么办git pull origin trunk:master
安德里(Andry)'18年

175

注意:绝不建议使用git。这将覆盖遥控器上的更改。仅当您知道100%将本地更改推送到远程主服务器时,才执行此操作。

试试这个: git push -f origin master


47
不,不要尝试这个。来自git help push:“这可能导致远程存储库丢失提交;请谨慎使用。”
jcsahnwaldt恢复莫妮卡

7
绝对不要这样做
圣路易斯

14
这对我有用。我认为这是可以的,因为我在github上的唯一提交就是使用新存储库创建的提交。在项目开始后不使用它可能是一个好主意。
马修·摩尔

1
如果您想更新为交付目的而创建的存储库(因此在远程端无新更改),则可能很有用
HiB

我刚刚使用了它,因为我刚刚进行了提交,并与GitHub同步,然后希望我向该提交中添加了另一个文件。因此,我在本地撤消了它,执行了上面的命令以从GitHub清除它,然后在本地再次提交,然后进行了同步。现在一切都好!提醒您,我知道事实上没有对该分支进行任何其他提交。
zeMinimalist

18

这个命令对我来说很好

git push -f origin master

3
使用此命令前请多加注意。通过使用此命令,您将丢失所有过去的提交。
twenk11k

-f表示推力

@maheshmnj是的!
testuser的

15

我刚收到此错误。

我在创建本地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

3
这个答案反映了实际情况。
kta 2014年

9

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

但是在存储库中不建议这样做,因为它已经有很多代码,因为这可能会使所有内容混乱

git push origin master --force

已经给出了此答案:stackoverflow.com/a/16374574/1771479,不建议这样做。
agold 2015年

9

警告:

寻求' git pull' 始终不是解决方案,因此请小心。如果您有意更改了存储库历史记录,则可能会遇到此问题(在Q中提到的问题)。在这种情况下,git会使您的历史记录更改与远程仓库中的新更改混淆。因此,您应该使用git push --force,因为调用git pull会故意撤消您对历史记录所做的所有更改。


8

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

             B
            /
        ---X---A

如果之后没有人更改回购A,那么你可以做git push --force

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

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

那么您必须重新设置人员从更改ABC-> D)的依据。

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

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


7

使用此命令:

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

喜欢:

git pull --allow-unrelated-histories origin master

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


7
git push -f origin master

使用蛮力;-)最有可能的是您试图添加在git上创建回购之前创建的本地文件夹。


2
包括此在内的所有答案都应发出警告。
D. Ben Knoble

1
我尝试了这个,这使我在GitHub上花费了很多时间,不得不从存储库的另一个本地克隆中恢复。危险的。
Paflow

6

这是因为您在母版中做了一些更改,所以项目要求您先拉。如果仍要推动它,则可以通过输入以下命令使用蛮力:

git push -f origin master

切记先提交您的更改:

git add .
git commit -m "Your commit message"


4

你需要做

git branch

如果输出是这样的:

* (no branch)
master

然后做

git checkout master

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


4

![拒绝]管理员->管理员(非快进)

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

$ git pull myrepo master

然后重试您的推送,一切都会正常:

$ git push github大师


4

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

因此,当我尝试从开发分支git push时,出现了该错误。

我通过切换到master分支,git pull修复了问题,然后返回到开发分支和git push。

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push

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 pushdev分支机构上也做得很好。


2

我的遥控器与本地不同步,因此对我有用

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推

1

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


1

这是因为您对其母版进行了相冲突的更改。而且您的存储库服务器无法用这些字告诉您,因此会出现此错误,因为与您为您解决这些冲突无关紧要,因此他请您自己执行。作为?

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

2-处理这些手动冲突。

3

git push origin master

而且,您的问题已解决。


0

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


我总是在Dropbox上备份我的git repo。这样,我不必删除本地存储库,只需在出现情况时从Dropbox复制并粘贴相关目录。
IgorGanapolsky



0

这也可能是由于在给存储库命名时引起的一些名称错误。如果以上任何一个答案都没有用,这对我有用:

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

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*
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.