! 主人 – >主人(取第一人)
有没有一个好的方法来解释如何解决“ ! [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
- 如果你想解决,先取(然后合并)。
- 如果你想破解,使用
--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 fetch
和git 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