從本機端同步到 GitHub 上頭的專案,於每次上傳 commit 時都會比對兩邊的資料。若有出現不一致的情形,就會挑出錯誤訊息。
錯誤情境
1.遠端資料較新
由於 Github 網站本身有提供修改的地方(可以線上編輯完然後commit),這樣一來便與本機端資料不同。故你可以使用 git fetch 抓取遠端資料後,再做 rebase 即可。修改完後,別忘記重新再 git push 到遠端。 此時,記錄線圖不會產生分支。
P.S. Git 是可以自動合併不同行的程式碼。
1 2 3 4 5 6 7 8 |
// first step, 從遠端抓資料 $ git fetch // second step, 以遠端資料為新參考點,兩邊同步資料 $ git rebase origin/master // third step, 在本機端修改完後,重新推到遠端 $ git push origin master |
2.遠端與本地端資料的同份文件衝突
若巧合的,同時有兩人以上更改了同一行程式碼,那麼 Git 就無法自動解決衝突,可以用以下方法來解決。解決後,會有合併的提交記錄。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// first step $ git fetch // second step $ git merge //衝突的地方會有以下記號。將以下兩者比對後,把錯誤記號標記刪除 //HEAD:目前本機程式碼位置,是本次修改。 //<sha-1> …….:剛從遠端更新的程式碼。 // third step,重新加入,commit 並且 push $ git add xxx.html $ git commit -m "conflict solved" $ git push origin master |
3.本機端資料較新,強制上傳
1 |
$ git push --force |
4.本機端退版(reset)
1 2 3 4 5 6 7 8 9 10 |
//1st step 退一版commit,HEAD~1 每做一次退一版 $ git reset --hard HEAD~1 //2nd step 重要步驟,以免造成兩地端資料不同步 //移除未加入版控的檔案(-f) & 目錄(-d) //請注意,進行以下指令會把資料完全刪除的不留痕跡(沒有暫存到垃圾桶),所以若是有需要的檔案,請先用圖形化介面複製一份 $ git clean -f -d //3rd step 重新上傳版本 $ git pull |
按讚加入粉絲團