GIT學習筆記(3)-多人協作、分支衝突
前言
在看工作的時候,發現很多公司都希望擁有git的經驗,雖然有過使用Github Desktop的經驗,但是還是想知道背後的原理,所以就開始上網查資料學習了。
可以參考這位六角學院的老師文章還有YT影片,實在是免費又大碗(淚。
發Github PR(pull request)請求流程
何謂PR
PR可以幫助我們修改別人的遠端數據庫的程式碼,並發起一個PR到別人的遠端數據庫,審核過了就可以成功把修改正式到別人的repo了
例如:
在 GitHub 上看到別人的 CODE 有問題,想幫他修改並提交讓他更新時,就得學會如何發 PR (pull request),發完之後別人覺得不錯,他就會commit到你剛剛發起的PR commit。
在Github發起PR
在這裡可以有一個六角學院所提供的資源,讓我們練習PR,首先到連結頁面後,可以看到Fork,點擊
接著就會跳到我們的數據庫,這時,用clone指令把檔案下載下來
接著在創建檔案,並且commit+上傳
這裡我是用ssh的方式上傳,成功後可以在網頁上看到:
接著到自己的數據庫,選擇Pull request之後
在按下Create pull request,下面也可以填PR的名字,還有要提交給對方的留言。
接下來到對方的repo看到我們提交的pr後,就代表成功了,剩下就只剩對方審核commit了
衝突
衝突就是指,分支的commit跟master的commit都動到同一行code的時候,在合併分支時就會有衝突,
本地衝突情境
情況製作好後,直接merge看看有什麼變化:
終端機出現:
➜ gitTest git:(master) ✗ git commit -m "修改標題master"
[master d02ff9a] 修改標題master
1 file changed, 1 insertion(+), 1 deletion(-)
➜ gitTest git:(master) git merge dev
自動合併 index.html
衝突(內容):合併衝突於 index.html
自動合併失敗,修正衝突然後提交修正的結果。
Git status
會顯示
➜ gitTest git:(master) ✗ git status
位於分支 master
您的分支領先 'origin/master' 共 1 個提交。
(使用 "git push" 來發布您的本機提交)
您有尚未合併的路徑。
(解決衝突並執行 "git commit")
(使用 "git merge --abort" 終止合併)
未合併的路徑:
(使用 "git add <檔案>..." 標記解決方案)
雙方修改: index.html
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
這時候打開vscode看看,會有選項讓我們做整合,
解決衝突
選擇好之後,可以看一下git status
,其實還時一樣寫著衝突的提示,是因為其實merge還沒完成,可以到source看一下:
這時候就需要在使用git add
還有git commit
來完成這次的合併,也同樣會跳出merge的提示視窗,保存後關起來,就會成功了。
➜ gitTest git:(master) ✗ git add .
➜ gitTest git:(master) git commit
[master 65eae63] Merge branch 'dev'
Sourcetree:
流程回顧
- checkout 到
master
後,輸入git merge dev
- 發生衝突,
index.html
變成Unmerged
狀態 - 修改
index.html
後,重新加入到索引git add index.html
- 透過
git status
指令觀察,是否可以重新提交 - 輸入
git commit
提交,並撰寫 commit 訊息,完成本次合併
遠端協作衝突
遠端協作其實跟本地協作是一樣的概念,只是我自己沒辦法完成情境(有點小麻煩,要兩個帳號),但總而言之就是兩個不同的人在相同的repo commit並修改之後git push
相同的程式碼
流程回顧
- 編輯完程式碼並且
git push
- 終端機顯示
git push
發生衝突,程式碼 變成Unmerged
狀態 git pull
之後,遠端的master就會跟本地端master合併- 修改過後,重新加入到索引
git add .
- 透過
git status
指令觀察,是否可以重新提交 - 輸入
git commit
提交,並撰寫 commit 訊息,完成本次合併 git push
在這些編輯的過程中,原本本地端的commit也會紀錄原本兩個人的commit紀錄
GitFlow
緣由:一個開發團隊可能有好幾個branch,但每個人對於分支的認知不同,造成每次commit到不同分支,大家也不知道合併要回到誰,若是都合併到master,一定會出大問題,故有了GitFlow去規範使用者。(參考)
所以gitflow可以說是一個git使用的規範,其中分三種種類:
- GitFlow
- Github flow
- GitLab flow
有興趣的可以去網路上google文章