2026-09-08

[版控] 整理專案的 flow

紀錄一下自己整理開發分支的動作

在專案開發時,當時間一長,就會出現許多 hotfix / feature 分支,合併至開發或正式分支上,導致整個變得紊亂。

下圖是一個常見的專案狀況

releasedevelophotfix/afeature/bfeature/c hotfix/dfeature/efeature/fv0.1.0v0.1.1v0.1.2
Git graph.

上圖以 Mermaid 製作而成,mermaid code 如下:

Mermaid
---
config: 
  gitGraph:
    showBranches: true
    showCommitLabel: false
    mainBranchName: 'release'
---
gitGraph  
    commit
    commit tag: "v0.1.0"
    branch develop 
    checkout release
    branch hotfix/a
    commit 
    commit 
    checkout release
    commit
    branch feature/b
    commit
    commit 
    checkout release
    branch feature/c
    commit
    commit 
    checkout develop
    merge hotfix/a
    merge feature/c 
    merge feature/b 
    checkout release
    merge feature/c 
    commit tag: "v0.1.1"
    branch hotfix/d 
    commit 
    checkout release 
    branch feature/e 
    commit 
    checkout release 
    branch feature/f  
    commit 
    checkout feature/e 
    commit
    checkout develop 
    merge release
    merge hotfix/d
    checkout release 
    merge hotfix/a 
    merge hotfix/d 
    commit tag: "v0.1.2"
    checkout develop 
    merge release
    merge feature/e 
    checkout feature/e 
    commit
    commit
    checkout develop 
    merge feature/f
    merge feature/e

mermaid.live 連結:mermaid.live

整理

現在 develop 分支已經變得紊亂了。整理的話,理想應該是

  1. 讓 develop 更新到 release 最新進度上面
  2. 重新將原本 develop 的內容合併至新的 release 上來

以 git 來說,就是

  1. 先執行 git rebase release --hard,更新 develop
  2. 執行 git merge feature/b、git merge feature/e、git merge feature/f 重新合併原本在 develop 上的分支
  3. 或者直接 git merge origin/develop,這樣是能讓分支比較不容易因為變更 develop 基底導致出現差異,但若合併不是用 squash,只會讓分支更亂

有的時候,還會為了方便,先執行 git checkout feature/b; git rebase release 更新開發分支的基底。

要找究竟有那些分支(前提是 develop 只有合併動作,沒有單獨的 commit)需要合併,以此圖為例,就是找 v0.1.0 ~ 最新的 develop 之間的合併 commit

git 指令如下:

git log --first-parent --merges --oneline v0.1.0..develop
這樣就會列出
<hash> merge branch 'feature/e' into develop
<hash> merge branch 'feature/f' into develop
<hash> merge branch 'feature/e' into develop
<hash> merge branch 'release' into develop
<hash> merge branch 'hotfix/d' into develop
<hash> merge branch 'release' into develop
<hash> merge branch 'feature/b' into develop
<hash> merge branch 'feature/c' into develop
<hash> merge branch 'hotfix/a' into develop

而執行 git log --first-parent --merges --oneline v0.1.0..release 則是

<hash> merge branch 'hotfix/d' into release
<hash> merge branch 'hotfix/a' into release
<hash> merge branch 'feature/c' into release

這樣就能得知尚未合併至 release 的有 feature/b、feature/e、feature/f,一個一個合併即可。

更新完後,專案會變成

releasehotfix/afeature/bfeature/chotfix/d feature/efeature/fdevelop v0.1.0v0.1.1v0.1.2
Git graph.

mermaid code 如下:

Mermaid
---
config: 
  gitGraph:
    showBranches: true
    showCommitLabel: false
    mainBranchName: 'release'
---
gitGraph  
    commit
    commit tag: "v0.1.0"
    checkout release
    branch hotfix/a
    commit 
    commit 
    checkout release
    commit
    branch feature/b
    commit
    commit 
    checkout release
    branch feature/c
    commit
    commit 
    checkout release
    merge feature/c 
    commit tag: "v0.1.1"
    branch hotfix/d 
    commit 
    checkout release 
    branch feature/e 
    commit 
    checkout release 
    branch feature/f  
    commit 
    checkout feature/e 
    commit
    checkout release 
    merge hotfix/a 
    merge hotfix/d 
    commit tag: "v0.1.2"
    branch develop 
    checkout feature/e 
    commit
    commit
    checkout develop 
    merge feature/b
    merge feature/f
    merge feature/e

mermaid.live 連結:mermaid.live

沒有留言:

張貼留言