# 六角學院 Git 團隊訓練任務 ## 任務五:GitHub PR 衝突解決 來源: - [Git 團隊訓練任務](https://hackmd.io/8uEPk1GeTBCl8lUQfD5b5Q) - [Git 任務五](https://hackmd.io/wzHNLy6aSqG59GeNoLwXSQ) --- ## 任務流程 - [ ] 1-1:<font color="red">**A 成員**</font> 新增一個新的 Repo,**將 B 成員加入協做**。增加 `index.html`,並在 `index.html` 加入以下內容,在 `main` commit 一個版本,**進行 git push 動作**,**==<font color="blue">B 成員</font> 也將進度 clone 下來==**。 ::: spoiler {state="open"} HTML 內容 ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> </html> ``` ::: - [ ] 1-2:<font color="red">**A 成員**</font> 在 `main` 分支進度上,開一個 `feature/editTitleA` 的分支 ,在`index.html` 的 title 調整為 `修改 Title A`, **將 `feature/editTitleA` 分支進行 git push,並發 PR 合併到 `main`,並指派 B 成員 review**。 ::: spoiler {state="open"} 提示 1. 在 `main` 分支進度上,開分支 `feature/editTitleA`,並切換至此。 ```bash git checkout -b feature/editTitleA ``` 2. 將 `index.html` 的 title 調整為 `修改 Title A`,一直進行到 push。 ```bash git add . git commit -m "修改 Title A" git push origin feature/editTitleA ``` 3. 發 PR 合併到 `main`,並指派 B 成員 review。 ::: - [ ] 1-3:<font color="blue">**B 成員**</font> 在 `main` 分支進度上,開一個 `feature/editTitleB` 的分支 ,在 `index.html` 的 title 調整為 `修改 Title B`, 將 `feature/editTitleB` 分支進行 git push,並發 PR 合併到 `main`,並指派 A 成員 review。 ::: spoiler {state="open"} 提示 1. 在 `main` 分支進度上,開分支 `feature/editTitleB`,並切換至此。 ```bash git checkout -b feature/editTitleB ``` 2. 將 `index.html` 的 title 調整為 `修改 Title B`,一直進行到 push。 ```bash git add . git commit -m "修改 Title B" git push origin feature/editTitleB ``` 4. 發 PR 合併到 `main`,並指派 A 成員 review。 ::: - [ ] 1-4:<font color="blue">**B 成員**</font> 審核 A 成員 的 PR 通過。 ::: spoiler {state="open"} 提示 可以先查看內容是否 OK。 ```bash git fetch origin feature/editTitleA git checkout origin/feature/editTitleA ``` ::: warning **注意!** 切換到 ==**origin/**== feature/editTitleA,代表的是切換到***本地數據庫的遠端分支引用***,此時 HEAD 會處於**分離狀態**。 使用 `git branch` 查看分支狀態。 如圖,星號位於 `(HEAD detached at origin/feature/editTitleA)`。 它並不隸屬於任何一個分支,只是一個暫時的狀態。  ::: ### 以下有兩個版本 #### 版本一:B 開發者自行處理 (業界傾向此種流程) - [ ] 1-5:<font color="red">**A 成員**</font> 檢視 B 的 PR 會發生衝突,於是退回 PR 或 ==**留言請 B 成員修好**==。 - [ ] 1-6:<font color="blue">**B 成員**</font> 進行 `git fetch origin main` 指令抓最新版本下來後,git checkout 到 `feature/editTitleB`,並合併 `origin/main` 進度,合併發生衝突需解衝突。並將 title 改為 `修改 title AB`, **將 `feature/editTitleB` 分支進行 git push,並請 A 成員 review**。 ::: spoiler {state="open"} 提示 1. fetch 最新的 `main` 下來。 ```bash git fetch origin main ``` 註:其實直接 `git fetch` 抓所有分支也可以,fetch 只是抓線圖下來看,並不影响程式。 2. 確認有位於分支 `feature/editTitleB`,若沒有則切換過去。 ```bash # 查看本地所在分支 git branch # 切換分支 git checkout feature/editTitleB ``` 註:若當初有切換到 `origin/feature/editTitleA` 分支查看,則分支會處於**分離狀態**,此時需要將分支切換回 `feature/editTitleB`。 3. 合併 `origin/main` 進度。 ```bash git merge origin/main ``` ::: warning **注意!** 合併 ==**origin/**== main,這代表它合併的是***本地數據庫的遠端分支引用***。 也就是說,合併的是 ==**遠端**== 版本,而不是 **本地端** 的 main 分支版本。 因為剛才都只有做 fetch 並沒有 pull,因此本地端的 main 並沒有最新的程式,所以這邊使用**合併遠端**的做法。 ::: 4. 解衝突,將 title 改為 `修改 title AB`,一直進行到將 `feature/editTitleB` 分支 push。 ```bash git add index.html # 會開啟編輯器 git commit git push origin feature/editTitleB ``` 註:若編輯器為 Vim 則輸入 `:wq` 存檔離開。 5. 在 PR 上留言請 A 成員再次 review。 ::: - [ ] 1-7:<font color="red">**A 成員**</font> 審核成功後,用 GitHub Pages 觀看 `main` 分支的頁面是否有出現預期網頁畫面。 ::: spoiler {state="open"} 提示 可以先查看內容是否 OK。 ```bash git fetch origin feature/editTitleB git checkout origin/feature/editTitleB ``` ::: #### 版本二:幫忙 Review 的 A 開發者,fetch 下來解衝突 (除非你主管跟同事是好人 ||應該是菩薩吧 😂||,才是此版本) - [ ] 1-5:<font color="red">**A 成員**</font> 檢視 B 的 PR 會發生衝突 - [ ] 1-6:<font color="red">**A 成員**</font> 進行 `git fetch origin main`、`git fetch origin feature/editTitleB` 指令抓最新版本下來後,git checkout 到 `feature/editTitleB`,並合併 `origin/main` 進度,合併發生衝突需解衝突。並將 title 改為 `修改 title AB`, **將 `feature/editTitleB` 分支進行 git push,並審核通過 PR**。 ::: spoiler {state="open"} 提示 1. fetch 所有分支最新狀態。 ```bash git fetch ``` 2. 切換到 `feature/editTitleB` 分支,並合併 `origin/main` 進度。 ```bash git checkout feature/editTitleB git merge origin/main ``` 3. 解衝突,將 title 改為 `修改 title AB`,一直進行到將 `feature/editTitleB` 分支 push。 ::: - [ ] 1-7:<font color="red">**A 成員**</font> 審核成功後,用 GitHub Pages 觀看 `main` 分支的頁面是否有出現預期網頁畫面。 <br> ## 通關檢核點 - [ ] A、B 成員與 GitHub Repo 都有相同的 commit 數量 - [ ] 預期線圖有符合 <br> ## 預期線圖  --- ## 補充知識 - ***`git checkout -b <分支名稱>`*** 結合了以下兩個指令: ``` git branch <分支名稱> git checkout <分支名稱> ``` - [10.3 Git 内部原理 - Git 引用](https://git-scm.com/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-Git-%E5%BC%95%E7%94%A8)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up