前几天通过大佬们的提醒,发现
-f
是force
强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容,因此说git push -f
是一个比较可怕的命令,和rm -rf
同样可怕?git
error:failed to push some refs to …
shell
当要push代码到git时,出现提示:fetch
error:failed to push some refs to ... Dealing with “non-fast-forward” errors From time to time you may encounter this error while pushing: $ git push origin master To ../remote/ ! [rejected] master -> master (non-fast forward) error: failed to push some refs to '../remote/' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes before pushing again. See the 'non-fast forward' section of 'git push --help' for details.
问题(Non-fast-forward)的出现缘由在于:git仓库中已经有一部分代码,因此它不容许你直接把你的代码覆盖上去。this
强推是解决办法之一,不过强推会覆盖以前的东西。。。至于覆盖了能不能找回,我尚未具体研究。命令行
另外还有一个办法,先把git的东西fetch到你本地而后merge后再push。code
git fetch git merge
这2句命令等价于rem
git pull
但是,这时候又出现了以下的问题:get
上面出现的 [branch "master"]是须要明确(.git/config)以下的内容it
[branch "master"] remote = origin merge = refs/heads/master
这等于告诉git2件事:io
1,当你处于master branch
, 默认的remote
就是origin
。
2,当你在master branch
上使用git pull
时,没有指定remote
和branch
,那么git
就会采用默认的remote
(也就是origin
)来merge
在master branch
上全部的改变
若是不想或者不会编辑config
文件的话,能够输入以下命令行:
$ git config branch.master.remote origin $ git config branch.master.merge refs/heads/master
以后再从新git pull
下。最后git push
你的代码吧。
总结:你的本地代码和远程仓库有冲突的时候,就会提示以上错误,说白了你就是要解决这些冲突,这样才能push
到远程仓库当中去。若有疑问,欢迎留言交流。原文地址