Git branch


Posted by yunanpan on 2020-06-17

為什麼需要 branch?

在開發網站的新功能時,有時會需要中途去修一下 bug。如果用一條線的方式開發網站,就會出現「卡在一半的新功能和修好 bug」的不完整網頁。而開啟不同分支去處理不同功能,便可以避免此種狀況。在各自的 branch 完成功能後再 merge 回主要檔案才是完整的檔案。分支的方法也可應用在團隊分工上。


Git branch 相關指令

git branch -v: 查看目前有哪些分支,並且可以看現在位在哪條分支上。
git branch <branch-name>:新開分支。
git branch -d <branch-name>:刪除分支。
git checkout <branch-name>:切換分支。
git merge <branch-name>:把分支合併進目前所在的分支。
以上面的示意圖為例,M+A 其實就是位在 master 上,輸入 git merge <ann> 將 A 合併進 M 裡。
git branch -m <new-branch-name>:想改分支的名稱(需要先切換到要改名稱的分支上)。
git checkout <remote-branch>:抓遠端的分支。

如果 merge 遇到衝突時該怎麼辦?

總是會有那麼一個不小心,互相改到對方的檔案,造成 merge 時產生衝突。這時也別緊張,Git 很聰明,不會讓你巡遍兩個檔案內容玩大家來找碴。在 merge 發生衝突時,就會跳出警告,而且還會告訴你該怎麼做:fix conflicts and then commit the result.

上圖為打算 merge feature1 進 master,但是 index.html 內容有衝突。
此時可以選擇直接在 git-bash 上 vim index.html 修改:

或是使用慣用的編輯器修改:

兩者都會出現 <<<<<HEAD(目前的分支內容) 和 >>>>>feature1(準備併近來的分支內容),中間會用 ===== 的符號分割開,藉此顯示兩者有衝突的地方跟內容。比較後手動修成正確的版本存檔後,再 commit 就大功告成了。

如果 merge 遇到衝突時該怎麼辦?

而 |||||||| <版本號> 和 ===== 的版本號和之間則為開分支出去的那次 commit 的版本號及內容。可以說是 master 和 feature1 共同的祖先。

Git 官網上有詳細介紹(圖片截自上述 Git 官網):

典型的合併會用到的三個快照:要併入的分支、要被併入的分支、兩個分支的共同祖先。










Related Posts

[Day 5] JS in Pipeline (5): Testing, Linting, and Git Hooks

[Day 5] JS in Pipeline (5): Testing, Linting, and Git Hooks

hoisting(提升)

hoisting(提升)

關於 Markdown 格式

關於 Markdown 格式


Comments