1. 程式人生 > >[Ting's筆記Day3]解決Git常見錯誤non-fast-forward問題

[Ting's筆記Day3]解決Git常見錯誤non-fast-forward問題

寫文章最難的部分,是找題材!

 

所以最近每次遇到bug或錯誤都挺興奮開心(zflwx)的,因為又可以寫筆記了

也可以記錄新手學習之路上遇到的常見問題,提供其他新手參考。

 

最近學Udemy平臺Ruby學習線上課程,我在本機練習做了一個Ruby on Rails專案(名稱定為:yelpdemo),

 

 

我先用subl .叫出Sublime編寫專案內的網頁,做一點修改後,

再用Terminal按照我自己Day2筆記所說的Git步驟試著同步此專案到Github的同名repository儲存庫。

 

前情提要:我再Github的repo是上週設定好的,所以自己有點忘記當初發生什麼事~導致接下來的問題

Step1.首先git status

看看目前working directory中所有檔案的情形,紅色代表這些檔案需要被追蹤:

 

 

Step2.git add .

把以上所有檔案交給Git,再輸入一次git status,綠色代表已更改為被追蹤:

 

 

Step3 git commit

git commit -m“first commit”,備註-m裡寫上“執行第一個提交指令commit”,將staged檔案儲存到儲存庫:

 

然後再輸入一次git status:

 

好了,到這邊都挺順的~

 

Step4.設定好要加入的路徑git remote add origin

git remote add origin https://github.com/(你的帳號)/(你的專案名稱):

設定遠端origin的repository路徑,然後再推送:

git push -u origin master

-u是update的意思,用了引數-u之後,未來就能直接使用不帶引數的git pull從以前push過的分支來pull。

 

如果你沒有先git remote add origin就直接git push

就會像我一開始一樣,出現了'找不到儲存庫'的問題喔!

 

Step5.git push -u origin master

[燈等!]更新被拒絕了,因為上週我在Remote建的的repo裡面,有些更動過的檔案版本,本地端並沒有:

 

[解決]提示告訴我可以先用git pull,

 

然後再git push一次:

 

 

重點在於最後一行:git push預設會推送「本地分支」到相同檔名的「遠端分支」

 

When push.default is set to 'matching',git will push local branchesto the remote branches that already exist with the same name.

[燈等!]問題再度出現:The current branch master has no upstream branch,表示當前分支主機沒有上游分支:

 

[解決]按照提示,依樣畫葫蘆地git push --set-upstream origin master

 

 

[燈等!]新的問題產生,提示說我的master是non-fast forward

 

 

這個non-fast forward的意思是本機commit和遠端的不相同,本地和遠端的Repository發生檔案衝突問題(線圖有分岔)。

 

由於上週在遠端建立的資料夾內容檔案發生改變,因此不允許我把本地的檔案覆蓋上去。

 

關於合併local端和remote端,近一步瞭解可以看git官網,或是連猴子都能懂的Git入門指南解釋

 

在push之前,我需要

git fetch

git merge

將遠端的改變用merge合併到本地上。

 

或是我可以用git push -f強制覆蓋本地檔案替代git儲存庫的內容。

 

Google關鍵字在stackoverflow找到的解法是

git push -f origin <branch>。

 

-f代表force:強制推送。如果不想把遠端分支的更動合併(merge)到本地分支,則可以使用這個指令。但要小心使用。

 

[解決]

 

回到github站上檢查,終於同步完成(leafor):

 

 

===

後記:

這是寫給自己提升記憶的筆記。相信之後如果在本機再建立其他新專案、遠端建立儲存庫並使用gite功能,可能還是會遇到以上類似的問題,身為自學git新新手,我沒有直接發問求救,而是靠google增加觀念、進而找到解答,因此還蠻開心的!

 

看了資料,有些工程師的建議是少用git pull,以git fetch和git merge代替。也許以後實作之後有類似的經驗和心得,再寫點相關的文章。