前幾天通過大佬們的提醒,發現
-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
到遠程倉庫當中去。若有疑問,歡迎留言交流。原文地址