# Git Flow [](https://hackmd.io/rgei9x1fTcWWZo1YsAZpMw) ###### tags: `Git` 是最早出現的一套流程,且廣泛被應用。 Git flow 提出不同的分支功能,分別有 master、develop 、hotfix、release、feature 五種分支。 而這五個分支,根據他們的性質,又有其他稱法: * 長期分支 - master 分支、develop 分支 原因:因 Master 與 Develop 分支會一直存活在整個 Git flow 裡,並不會被刪除掉。 * 短期分支 - hotfix 分支、release 分支、feature 分支 原因:當完成專案後,這些更新的版本都會被合併進 Master 或 Develop 分支 ,之後就會被刪除掉。 ## 分支應用情用 ### Master 分支 master 是當 Git 建立版本控制時,就預設的分支,主要用來放穩定、隨時可上線的版本。 永遠處在 production-ready 狀態 來源是從其他分支合併過來,開發者不會直接 Commit 到此分支上。 因為是穩定版本,所以通常會在 master 分支上的 Commit 貼上「 版本標籤 」。 ### Develop 分支 作為主要開發的分支,是所有短期分支的基礎分支。 最新的下次發佈開發狀態 Feature 分支從 Develop 分支切出去,當功能完成後,在合併回來 Develop 分支。 創建 Develop 分支的指令: ``` $ git checkout -b develop master ``` 當要發布時,在 Master 分支上對 Develop 分支進行合併: ``` $ git checkout master # 切換到 master 分支 $ git merge --no-ff develop # master 分支對 develop 分支進行合併 -no-ff 參數代表不要快轉模式(fast-forward),會額外產生一個 Commit 物件。 ``` ### Hotfix 分支 主要功能是用來進行修復 從 Master 分支切出來的。 當修復完後,會合併回 Master 分支, 也同時會合併回 Develop 分支。 👉 合併回 Develop 分支的原因: 更新 Develop 分支的版本,避免遇到將 Develop 分支並回 Master 分支時,同樣的問題又出現。 👉 避免直接從 Develop 分支切出 Hoxfix 分支的原因: Develop 分支為功能開發階段的分支,如果直接從 Develop 分支切 Hotfix 分支,再合併回 Master 分支,可能會造成管理上的問題/災難。 建立一個 Hotfix 分支 ``` $ git checkout -b fixbug-0.1 master ``` 常用 fixbug-* 的形式命名 修補結束後,合併到 Master 分支 ``` $ git checkout master # 切換到 master 分支 $ git merge --no-ff fixbug-0.1 # 搭配非快轉模式參數合併 hotfix 分支 $ git tag -a 0.1.1 # 貼上訊息標籤 ``` 同時也要再合併到 Develop 分支 ``` $ git checkout develop # 切換到 develop 分支 $ git merge --no-ff fixbug-0.1 # 搭配非快轉模式參數合併 hotfix 分支 ``` 最後再將 Hotfix 分支刪除 ``` $ git branch -d fixbug-0.1 # 刪除 fixbug-0.1 分支 -d 參數為刪除之意 ``` ### Release 分支 在 Develop 分支發布正式版本到 Master 分支之前,可以先進行一個預備發布的本版本進行測試。 從 Develop 分支切出來 完成後需合併到 Master 分支與 Develop 分支 👉 為何又需要再合併 Develop 分支? Master 分支為上限版本,而合併 Develop 分支的原因是為了後續可能 Release 分支上還會偵測到其他問題,所以需與 Develop 分支同步,以防再度出現同樣的問題。 ### 建立 Release 分支 ``` $ git checkout -b release-1.2 develop ``` release-* 的形式命名 修正完成後,合併到 Master 分支 ``` $ git checkout master # 切換到 master 分支 $ git merge --no-ff release-1.2 # 合併 release-1.2 分支,使用非快轉模式合併 $ git tag -a 1.2 # 為新的節點新增訊息標籤 ``` 之後也要記得合併到 Develop 分支上 ``` $ git checkout develop # 切換到 develop 分支 $ git merge --no-ff release-1.2 # 合併 release-1.2 分支,使用非快轉模式合併 ``` 兩個長期分支都合併完後,再刪除掉 Release 分支 ``` $ git branch -d release-1.2 ``` Feature 分支 主要用來新增功能的分支。 都是從 Develop 分支切出來的,完成後再合併回 Develop 分支。 建立一個 Feature 分支 ``` $ git checkout -b feature-x develop ``` feature-* 的形式命名 功能開發完成後,再將 Feature 分支合併到 Develop 分支上 ``` $ git checkout develop # 切換到 develop 分支 $ git merge --no-ff feature-x # 合併 feature-x 分支,使用非快轉模式合併 ``` 同樣完成後,會刪除掉分支 ``` $ git branch -d feature-x # 刪除 feature-x 分支 ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up