[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代替。也許以後實作之後有類似的經驗和心得,再寫點相關的文章。