10 所有文章

【Git教學】分支合併: merge 與 rebase 差異

git_branch_rebase_merge_Max行銷誌

ㄧ. 什麼是分支 branch

在開發軟體時,可能同時會有多人在開發同一功能或修復錯誤,也可能會有多個發佈版本的存在,並且需要針對每個版本進行維護。為了能支援同時進行數個功能的增加或版本控制,Git 具備了分支的功能。

二. 分支 branch 基礎操作

1. 建立分支

$ git branch <Name>

2. 切換指定分支

$ git checkout <Name>

$ git checkout -b <Name> # 同時建立且切換分支

3. 查看目前所有本地分支

$ git branch # 查看本地所有分支

$ git branch -a # 查看所有分支(含遠端分支)

4. 刪除指定分支

$ git branch -d <name>

三. 分支 branch 合併操作

1. merge 篇

在使用 merge 合併分支的時候,git 預設會以 fast-forward 的模式進行,那什麼是 fast-forward 和 no-fast-forward 呢?我們來看以下的動圖範例:

▍fast-forward

# 先切換到主分支
$ git checkout master

# 使用 fast-forward
$ git merge <branch> 

▍no-fast-forward

# 先切換到主分支
$ git checkout master

# 使用 no-fast-forward
$ git merge <branch> --no-ff 

可以很清楚的看到同樣都是 merge,使用 no-fast-forward 的模式,會長出小耳朵,可以讓成員在日後很清楚辨識不同的 commit 歷程所包含的功能有哪些,但是過多的小耳朵反而會造成混亂,所以就會需要 fast-forward 用來 merge 些較不重要的 commit,像是零碎的 bug fix,保持 git commit 的乾淨。

2. rebase 篇

▍功能一:合併版本

Rebase 是 “Re-” 與 “Base” 的複合字,這裡的 “Base” 代表「基礎版本」的意思,表示你想要重新修改特定分支的「基礎版本」,把另外一個分支的變更,當成我這個分支的基礎。

# 切換至 branch1 分支:
git checkout branch1

# 然後執行 Rebase 動作,把 master 當成我們的基礎版本: 
git rebase master

▍功能二:修改歷史 commit 紀錄

除上述功能外,rebase 還能用來修改特定分支線上任何一個版本的版本資訊

$ git rebase -i HEAD~3

使用 rebase 之前,一定要先問問自己「有沒有人也在使用這個分支」,如果有的話,請非常小心使用,因為 rebase 會改變歷史紀錄。

關於更詳細的 rebase -i 操作可以參考此篇:修正 commit 過的版本歷史紀錄 Part 5

四. 使用 merge 與 rebase 時機

如果 branch 是私有分支,rebase 可以有效幫你「重整版本」來保持 commit 紀錄是呈線性整齊,而如果是共有分支則使用 merge fast-forward 或 merge no–fast-forward,來避免修改到同事的歷史紀錄。

最後~

▍回顧本篇我們介紹了的內容:

  • 什麼是分支 branch
  • 分支 branch 基礎操作
  • 分支 branch 合併操作
    • merge 篇
    • rebase 篇
  • 使用 merge 與 rebase 時機

Git 相關延伸閱讀:

其他相關延伸閱讀:

那 [Git教學] 分支合併: merge 與 rebase 差異 就到這邊,感謝收看,有關 Max 行銷誌的最新文章,都會發佈在 Max 的 Facebook 粉絲專頁,如果想看最新更新,還請您按讚或是追蹤唷!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *