Featured image of post GIT學習筆記(3)-多人協作、分支衝突

GIT學習筆記(3)-多人協作、分支衝突

解決相同程式碼同時commit的情況下該如何解決

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:

流程回顧

  1. checkout 到 master 後,輸入 git merge dev
  2. 發生衝突,index.html 變成 Unmerged 狀態
  3. 修改 index.html 後,重新加入到索引 git add index.html
  4. 透過 git status 指令觀察,是否可以重新提交
  5. 輸入 git commit 提交,並撰寫 commit 訊息,完成本次合併

遠端協作衝突

遠端協作其實跟本地協作是一樣的概念,只是我自己沒辦法完成情境(有點小麻煩,要兩個帳號),但總而言之就是兩個不同的人在相同的repo commit並修改之後git push相同的程式碼

流程回顧

  1. 編輯完程式碼並且git push
  2. 終端機顯示git push發生衝突,程式碼 變成 Unmerged 狀態
  3. git pull之後,遠端的master就會跟本地端master合併
  4. 修改過後,重新加入到索引 git add .
  5. 透過 git status 指令觀察,是否可以重新提交
  6. 輸入 git commit 提交,並撰寫 commit 訊息,完成本次合併
  7. git push

在這些編輯的過程中,原本本地端的commit也會紀錄原本兩個人的commit紀錄

GitFlow

緣由:一個開發團隊可能有好幾個branch,但每個人對於分支的認知不同,造成每次commit到不同分支,大家也不知道合併要回到誰,若是都合併到master,一定會出大問題,故有了GitFlow去規範使用者。(參考

所以gitflow可以說是一個git使用的規範,其中分三種種類:

  • GitFlow
  • Github flow
  • GitLab flow

有興趣的可以去網路上google文章

comments powered by Disqus