! 主人 – >主人(取第一人)

有没有一个好的方法来解释如何解决“ ! [rejected] master -> master (fetch first)' ”在Git?

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

 ! [rejected] master -> master (fetch first) error: failed to push some refs to 'git@github.com:zapnaa/abcappp.git' 

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

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

如果你不这样做(或者更糟糕的话,如果你使用--force选项强制执行),你可以搞砸提交历史。

编辑:我进入了最后一点的更多细节,因为这里的一个人只是给了使用 – --force选项非常不好的build议。

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

TL; DR

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

不过,你问前者。 总是,即使你总是会自己使用git,因为这是一个很好的做法。

你应该使用git pull ,这个命令做一个git fetch ,然后做git merge

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

尝试:

 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 

并解决了我的问题

试试这个git命令

 git push origin master --force 

或缺乏强制力

git push origin master -f

拉总是正确的方法,但一个例外可能是当你试图将一个非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 

很有可能其他人(例如你的同事)已经将提交到不在本地master分支中的origin/master提交,并且你试图将一些提交从你的本地分支推送到服务器。 在99%的案例中,假设您不想从origin抹去工作,您有两种select:

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

(请注意,在这种情况下, git pull本质上就是一个git fetchgit merge 。)

1)重新build立你的本地分支,这样看起来你的同事先提交他们的提交,然后你做了提交。 这使得提交历史保持良好和线性 – 并避免了“合并提交”。 但是,如果您与同事的更改发生冲突,则在最坏的情况下,您可能不得不为每个提交(而不是一次)解决这些冲突。 从本质上讲,这对于其他人来说更好,但是对于你来说更多的努力。 git pull --rebase # resolve conflicts here git push

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

有时会发生在您通常以README的forms复制文件时。

您可以使用以下命令:首先使用–mirror标志克隆您的repo的全新副本:

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

然后按照相应的代码:

使用命令行将现有项目添加到GitHub

即使这不起作用,你可以简单地编码:

 $ git push origin master --force 

要么

 $ git push origin master -f