---
# System prepended metadata

title: 六角學院 Git 團隊訓練任務練習（三）
tags: [Git]

---

# 六角學院 Git 團隊訓練任務
## 任務三：多分支管理與 git reset 還原
來源：
- [Git 團隊訓練任務](https://hackmd.io/8uEPk1GeTBCl8lUQfD5b5Q)
- [Git 任務三](https://hackmd.io/GNp0ec65RZ64n6PGaeCrpg)

---

### 任務流程

- [ ]  1-1：A 成員新增一個新的 Repo，增加 `index.html`、`all.css`，並在 `index.html` 加上一個 h1 標題，並在 `all.css` 將 h1 設計文字為藍色，**進行 git push 動作**。
    提醒：要加入 README、gitignore，並將對方加入協作。
- [ ]  1-2：A 成員開 `dev` 分支，**將 dev 分支進行 git push 動作**。
    ::: spoiler {state="open"} 提示
    ```
    git branch dev
    git push origin dev
    ```
    註：不一定要切換到 dev 分支也可以將其推上去。
    :::
    
- [ ] 1-3：B 成員 clone 下來，並故意在 main 分支，將 all.css 的標題文字顏色變成綠色，並 commit 一個版本。

- [ ] 1-4：B 成員使用 reset 語法還原後，***切換 `dev` 分支*** commit 一個版本，**將 dev 分支進行 git push 動作**。
    ::: spoiler {state="open"} 提示
    Rest 回前一版：
    ```
    git reset HEAD^
    或
    git reset HEAD~
    ```
    Push：
    ```
    git push
    或
    git push origin dev
    ```
    註：這邊之所以可以直接使用 `git push`，是因為 B 成員 clone 數據庫時已存在 dev，git 會自動追蹤遠端 dev 分支（main、dev 都會）。
    :::
    
- [ ] 1-5：A 成員進行 git pull 抓 `dev` 最新版本下來。
    ***提醒：要記得切換到 dev，不然就等著 QQ。***
    ::: spoiler {state="open"} {state="open"} 提示
    ```
    git pull origin dev
    ```
    
    - 註 1：
    這邊無法直接使用 `git pull`，因為 A 成員的本地端並未追蹤遠端 dev 分支，所以必須使用指定分支的方式。
    
    - 註 2：
    使用這種指定分支的指令，一定要先切換到正確的分支再進行。
    如果在 main 進行這個指令，會把 dev 的內容合併到 main。
    
    - 註 3：
    如果真的不小心做錯分支，就用 reset 將之還原，然後再切換到正確的分支做。
    請使用硬還原（`--hard`），如果沒用硬還原會保留原檔案，而出現未提交變更。
    若忘記用硬還原，也可以事後捨棄變更。
    指令（**捨棄所有變更**）：`git restore .` 或 `git checkout .`
    :::
    
- [ ] 1-6：A 成員修改 head 的 `title`，文字設為 `修改 title`，並 commit 一個版本，comment 內容為 `修改 head title`，**將 dev 分支進行 git push 動作**。
    ::: spoiler {state="open"} 提示
    ```
    git push origin dev
    ```
    註：這邊無法直接使用 `git push`，因為 A 成員的本地端並未追蹤遠端 dev 分支，所以必須使用指定分支的方式。
    :::
    
- [ ]  1-7：B 成員進行 `git pull` 抓 `dev` 最新版本下來。
    **提醒：注意有在 dev 分支。**
    ::: spoiler {state="open"} 提示
    ```
    git pull
    或
    git pull origin dev
    ```
    :::
    
- [ ]  1-8：B 成員修改 h1 的文字設為 `修改標題`，並 commit 一個版本，comment 內容為 `修改 h1 文字`，**將 dev 分支進行 git push 動作**。

- [ ] 1-9：B 成員透過 GitHub ，申請一個 main 合併 dev 進度的 PR，並指派 A 成員進行審核。

- [ ] 1-10：A 成員審核成功後，用 GitHub Pages 觀看 `main` 分支的頁面是否有出現預期網頁畫面。


### <br>通關檢核點

- [ ]  A、B 成員與 GitHub Repo 都有相同的 commit 數量
- [ ] 預期線圖有符合


### <br>預期線圖
![](https://hackmd.io/_uploads/H1irqglMp.png)

---

### 補充知識
- **git pull = git fetch + git merge**
- [Git-本地分支、遠端分支、遠端追蹤分支](https://ithelp.ithome.com.tw/articles/10211819)
- [跟踪分支](https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF#:~:text=origin/serverfix%E3%80%82-,%E8%B7%9F%E8%B8%AA%E5%88%86%E6%94%AF,-%E4%BB%8E%E4%B8%80%E4%B8%AA%E8%BF%9C%E7%A8%8B)
- [Pull 下載更新](https://gitbook.tw/chapters/github/pull-from-github)
- [拉取](https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF#:~:text=git%20branch%20%2Dvv-,%E6%8B%89%E5%8F%96,-%E5%BD%93%20git%20fetch)