紀錄一下自己整理開發分支的動作
在專案開發時,當時間一長,就會出現許多 hotfix / feature 分支,合併至開發或正式分支上,導致整個變得紊亂。
下圖是一個常見的專案狀況
上圖以 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 分支已經變得紊亂了。整理的話,理想應該是
- 讓 develop 更新到 release 最新進度上面
- 重新將原本 develop 的內容合併至新的 release 上來
以 git 來說,就是
- 先執行
git rebase release --hard,更新 develop - 執行
git merge feature/b、git merge feature/e、git merge feature/f重新合併原本在 develop 上的分支 - 或者直接
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,一個一個合併即可。
更新完後,專案會變成
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
沒有留言:
張貼留言