git中出現“non-fast-forward”errors時的終極解決方案

如果你是個git新手,通過網上那一頁教程學會了使用git bash將自己的項目push到遠端repository。那麼你一定遇到過如下的問題:
non-fast-forward

error: failed to push some refs to ‘ur repository’

而如果,你百度了這個問題,你將在百度的前三頁搜索中得到完全相同的答案:

問題(Non-fast-forward)的出現原因在於:git倉庫中已經有一部分代碼,所以它不允許你直接把你的代碼覆蓋上去。於是你有2個選擇方式:
1,強推,即利用強覆蓋方式用你本地的代碼替代git倉庫內的內容
git push -f

2,先把git的東西fetch到你本地然後merge後再push
$ git fetch
$ git merge

以上皆爲狗屁

如果你真的照做了:
* 第一個方法會完全覆蓋掉你之前的提交。如果你只是提交幾個修改,那就真是得不償失了。
* 第二個方法並沒什麼卵用。


終極解決方案

出現(non-fast-forward)的根本原因是repository已經存在項目且不是你本人提交(我知道是大概率你提交的,但是git只認地址),你commit的項目和遠程repo不一樣。這時該怎麼辦呢?很簡單,把遠端項目拉回本地:

git pull

然而pull回來之後,你再push依舊會fail。
原因是他們是兩個不同的項目,要把兩個不同的項目合併,不能簡單的git pull。而是

git pull origin master --allow-unrelated-histories

這條命令允許了不同項目的合併。
好了,pull成功了。
接下來

git push origin master

遊戲結束。


其實遇到各種坑,都是對原理的不理解導致的。學習git,理解+使用,絕對要比使用+使用事半功倍。共勉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章