# Git #4 branch 分支 ###### tags: `Git` ## branch 指令 | 指令 | 說明 | | -------- | -------- | | git branch 分支名稱 | 新增分支 | | git branch | 查看分支 | | git checkout 分支名稱 | 切換到某個分支 | | git merge 分支名稱 | 合併分支 | | git log | 觀看 commit 歷史紀錄也可以查看分支是否有合併 | | git merge 分支名稱 --no-ff | 合併時強制取消快轉 | | git log --oneline --graph | 觀看線圖 | | git reset —hard ORIG_HEAD | 還原合併前狀態 | | git branch 新分支名稱 commit編號 | 將特定 commit 貼上分支 | | git branch -d 分支名稱 | 刪除分支 -D 是強制刪除 | | git reset HEAD^ | 還原上個版本 | ## 什麼是分支 分支就像貼紙一樣會貼在 commit ## 為什麼要用分支?  * 多人協作時,不可能都在 master * 可以讓 master 都是正式版資料,可以開分支來做測試或開發,藉此不影響正式主機分支 ## 常見分支名稱 * master 預設分支 - 合併時才會產生 commit * develop 開發分支 - 合併時才會產生 commit * feature 開發新功能分支 --- ## git branch dev - 新增分支 我們開設一個分支叫做 dev  使用 `git branch dev ` 新增完之後,用 `git branch` 可以看到除了 master 分支之外,還多了一個 dev 分支 --- ## git checkout dev - 切換分支 創建完之後我們透過 `git checkout` 來切換到 dev 分支  切換到 dev 分支後,並在這個分支上新增檔案,並使用 `git add .` + `git commit -m 'dev 5/27'` 來將檔案新增到本地數據庫 上圖為執行以上動作後, source tree 上有一個 dev 分支並有一個 commit 哩 ### 回到 master 分支檢查 我們在 dev 分支的 index.css 新增一個屬性,<font color='red'> 而在 master 分支的 index.css 並沒有寫下這個屬性 </font>  <font color='red'>當我們切回去 master 分支時,可以發現這個屬性不見了</font> #### 原因! 因為我們 master 分支的 commit 還在上一版,所以當然不會有 dev 分支新增的檔案  --- ## git merge dev - 合併分支 從上面的步驟結果得知, master 分支並沒有 dev 分支相同的檔案進度,但是想要將 master 檔案更新到 dev 分支一樣的話,就要開始使用合併指令 ### step1 切回去 master 因為是 master 進度要跟 dev 一樣,所以我們必須使用 `git checkout master` 回到 master 分支 ### step2 master 合併 dev 切回去 master 分支後就要開始合併分支,使用 `git merge dev`  執行完之後你就可以看到你的 master 分支的 index.css 也多了跟 dev 分支一樣的屬性哩  source tree 可以看到他們兩個分支合再一起了  **`git log `** 也可以知道合併再一起了沒 --- ## 快轉機制 當我們合併的時候會出現一行 `Fast Forward`,代表觸發了快轉機制  ### 什麼是快轉機制 透過上一步合併指令,我們將 master 分支的檔案進度變得跟 dev 分支一樣,而快轉機制是 <font color='red'>不會產生額外的 commit ,而是直接到合併分支所屬的 commit 點上 </font>  原本 master 是在第二個 commit ,進度跟 dev 不同,我們合併之後,快轉機制直接將 master 移動到了 dev 所在的 commit 惹,並<font color='red'>不會產生另外的 commit</font> ### 非快轉機制 如果我們在 master 分支新增一個 index2.html 檔案並 commit 到本地數據庫,另外在 dev 分支上在新增一個 all3.css 檔案並 commit 到本地數據庫  可以看到 source tree 上 master 跟 dev 出現了分歧點 ### 我們在一次合併 master 跟 dev <font color='red'>記得切換到 master 分支</font>,執行 `git merge dev` 合併 dev  合併完之後查看 source tree,可以看到兩個合併再一起了,<font color='red'>提醒!!!!合併完之後 dev 進度不會跟 master 一樣喔</font> ### 那非快轉到底是什麼 因為 master 跟 dev 分支分別各自新增了不同的檔案,所以開啟了分歧點,然而合併指令執行後,Git 又<font color='red'>新增了一個 commit</font> 來連結 ## 快轉與非快轉差異 簡單來說就是有沒有出現分歧點時,出現分歧點時需要另外<font color='red'>在新增一個 commit 來做連結</font> (非快轉),而如果沒有則直接將 commit 進行同步就可以了(快轉) ## 習慣多利用 --no-ff 來取消快轉 這樣比較能看得出來做了什麼事情,commit 不會只是同一條 ## 注意! 如果我們刪除了某個分支,該分支的 commit 並不會消失 ## 練習 [learngitbranch](https://learngitbranching.js.org/?locale=zh_TW) [模擬題目](https://drive.google.com/drive/folders/1koW25onvGTHtnHuob2UR1x6Jxywo34Om)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.