2015-02-10 52 views
41

有没有一种很好的方法来解释如何解决Git中的“! [rejected] master -> master (fetch first)'”?! [拒绝]主 - >主(取第一个)

当我使用这个命令$ git push origin master它显示一条错误消息。

! [rejected]  master -> master (fetch first) 
error: failed to push some refs to '[email protected]:zapnaa/abcappp.git' 
+0

同样的问题:d – core114 2017-11-29 04:07:14

回答

50

答案就在那里,git告诉你先取回。

也许其他人已经推到掌握了,你的承诺就落后了。因此,您必须获取,合并变更集,然后才能再次推送。

如果您没有(甚至更糟糕,如果您使用--force选项强制执行此操作),则可以搞乱提交历史记录。

编辑:我进入了最后一点的更多细节,因为这里的一个人刚给了使用--force选项的非常糟糕的建议。

由于git是一个DVCS,理想情况下许多其他开发人员正在使用相同的存储库(或其分支)与您在同一项目上工作。如果您用变更集强制覆盖,那么您的存储库将与其他人的配置不匹配,因为“您重写了历史记录”。你会让其他人不满,存储库会受到影响。世界上的小猫也许也会哭泣。

TL; DR

  1. 如果要解决,首先取(然后合并)。
  2. 如果您想破解,请使用--force选项。

不过你问过前者。尽管你会一直使用git,因此这是一个很好的习惯。

+0

无法获取删除本地文件的重要变化? – 2017-08-01 14:25:25

+0

它在提取后不会改变 – dhein 2017-08-17 12:41:00

+0

@dhein正如我写的,提取后必须跟一个合并 - 关键是你必须“将”本地树与远程树“对齐”(因此与合并) - 但是,谢谢,我把它写在TL中; DR太 – linuxbandit 2017-09-17 12:12:07

3

试试这个混帐命令

git push origin master --force 

或短的力-f

git push origin master -f

+0

感谢@ user1865618,git push origin master --force。这个命令节省了我的时间 – 2017-04-21 12:25:52

+0

在阅读其他答案后说:'不要这样做,除非你知道你在做什么'。 :-) – Zeth 2017-07-10 15:22:41

+0

这覆盖了git推送限制。不建议用于团队合作。从git推文档:如果其他人在你重组之前建立在原始历史的基础之上,那么远程分支的顶端可能会随着她的提交而前进,并盲目地用-force will_ **失去她的工作**。 – Casey 2017-10-04 09:57:25

16

你应该使用git pull,that's命令做一个git fetch和明年做git merge

如果您使用git push origin master --force命令,您可能在将来遇到问题。

+0

如果你只是项目中的唯一一个人,并且在尝试第一次推动时感到沮丧,那么你是否应该只使用--force? – Chrips 2017-10-20 04:29:16

6

pull始终是正确的方法,但有一个例外可能是当您尝试将非Git文件系统转换为Github存储库时。在那里你必须强制第一次提交。

git init 
git add README.md 
git add . 
git commit -m "first commit" 
git remote add origin https://github.com/userName/repoName.git 
git push --force origin master 
+0

适合我,我又开始了一个新项目(同样的回购),我想替换它。 – ucotta 2017-06-02 18:46:36

15

尝试:

git fetch origin master 
git merge origin master 

后,写了这个代码,我收到其他错误:(非快进)

我写这篇文章的代码:

git fetch origin master:tmp 
git rebase tmp 
git push origin HEAD:master 
git branch -D tmp 

而且解决了我的问题

+0

同样适用于我。这解决了我的问题。有几个警告。我搞砸了一个子库,但解决它与此:http://stackoverflow.com/questions/19584255/what-does-a-grey-icon-in-remote-github-mean – 2017-01-10 16:17:04

+0

谢谢它为我工作 – core114 2017-11-29 04:06:32

0

它'可能是其他人(例如,你的同事)已将提交到origin/master上,而这些提交并不在你本地的master分支中,而你试图将一些提交从本地分支推送到服务器。在99%的情况下,假设您不想从origin中删除他们的工作,您有两种选择:

2)将他们的更改合并到您的本地分支,然后推送合并的结果。 git checkout master git pull # resolve conflicts here git push

(注意git pull本质上只是一个git fetch,在这种情况下,git merge

1)调整基线您当地的分行,所以它看起来像你的同事提出了提交第一,然后你做了提交。这使得提交历史很好,并且保持线性 - 并且避免了“合并提交”。但是,如果您与同事的更改发生冲突,则可能需要在最坏的情况下为您的每个提交(而不是仅仅一次)解决这些冲突。从本质上讲,对其他人来说更好,但对你来说更多的努力。 git pull --rebase # resolve conflicts here git push

(注意git pull --rebase本质上是一个git fetchgit rebase origin/master。)

0

有时,当你重复的文件通常README排序它发生。

0

您可以使用下面的命令: 首先克隆你的回购的全新副本,使用--mirror标志:

$ git clone --mirror git://example.com/some-big-repo.git 

然后遵循相应代码:

Adding an existing project to GitHub using the command line

即使不起作用,您也可以简单地编码:

$ git push origin master --force 

$ git push origin master -f 
相关问题