你是否經歷過這種場景:臨到發版,一堆功能代碼擠在一起,測試分不清范圍,修復一個Bug可能引發三個新Bug?發布過程像一場豪賭?
問題的核心往往在于分支策略和流程的混亂。今天,我們就來建立一套在絕大多數場景下都簡單、清晰、高效的代碼管理標準。
一、核心目標:我們要解決什么?
主線穩定:確保主分支的代碼隨時可以發布到生產環境。
并行開發:讓多個功能開發互不干擾。
發布清晰:清楚地知道這次發布包含了什么,出了問題能快速定位和回滾。
簡化流程:規則越簡單,越容易執行,越不容易出錯。
二、極簡分支策略:兩條主線 + 功能分支
忘掉那些復雜的分支模型。對于90%的項目,你只需要兩種長期存在的主分支和一種臨時分支:
分支類型 | 誰用? | 作用 | 禁忌 |
---|---|---|---|
主分支 (Main/Master) | 所有人 | 神圣不可侵犯。它始終與生產環境運行的代碼完全一致。 | 嚴禁直接推送代碼。唯一來源是合并請求。 |
開發分支 (Develop) | 開發者 | 新功能集成的大本營。這里的代碼是下一個版本的預覽。 | 不要從這里直接發版。 |
功能分支 (Feature) | 單個開發者 | 從?develop ?拉取,用于開發一個新功能或修復。 | 生命周期要短,完成必須合并刪除。 |
怎么操作?
所有新功能開發,都必須從最新的?
develop
?分支切出一個新的功能分支。分支命名要有意義,例如:
feature/user-payment
?或?fix/login-issue
。
三、核心流程:如何執行?
整個流程的核心是?“切新分支開發”?和?“合并請求(Pull Request)”。
1. 開發新功能流程
記住:一個功能,一個分支,一個合并請求。
準備:基于最新的?
develop
?分支,切出新分支?git checkout -b feature/awesome-new-thing develop
。編碼:在你的功能分支上專心工作,頻繁提交。
提審:完成后,發起一個到?
develop
?分支的合并請求(Pull Request)。審查:
必須有同事審查你的代碼。
必須有自動化工具(CI)檢查你的代碼:能否成功編譯?單元測試是否都通過?代碼風格是否符合規范?
CI檢查不通過,絕對禁止合并!
集成:審查通過,CI全綠,才能將功能分支合并回?
develop
。清理:合并成功后,立即刪除這個功能分支。保持倉庫整潔。
2. 發布版本流程(這是關鍵!)
當?develop
?分支集成了足夠的功能,準備發布一個新版本時:
啟動發布:從?
develop
?分支切出一個發布分支,以版本號命名,例如?release/v1.2.0
。問:為什么不用
develop
直接發?答:為了隔離。發布前的最終測試和修復可能會產生新的提交,我們不想影響正在開發下一個版本的人。
測試與修復:QA團隊只測試這個?
release/v1.2.0
?分支。發現的所有Bug,都在這個發布分支上修復。發布上線:
測試通過后,將?
release
?分支合并到?main
?分支。至關重要的一步:在?
main
?分支上打一個標簽(Tag),標簽名就是版本號?v1.2.0
。這個Tag就是你發布和回滾的精確坐標。將?
release
?分支也合并回?develop
?分支,確保修復的Bug在后續開發中也不會再現。
部署:將打上Tag的?
main
?分支代碼部署到生產環境。清理:刪除發布分支?
release/v1.2.0
。
3. 修復線上緊急Bug
線上出現緊急Bug,需要立刻修復怎么辦?
基于主分支修復:從?
main
?分支的最新Tag(比如?v1.2.0
)切出一個熱修復分支,例如?hotfix/critical-payment-bug
。快速修復:在這個分支上以最快速度修復問題并測試。
緊急發布:
將修復好的?
hotfix
?分支合并到?main
,并打上新Tag?v1.2.1
。同樣至關重要:將?
hotfix
?分支也合并回?develop
,確保修復不會丟失。
部署:部署新Tag?
v1.2.1
?到生產環境。清理:刪除熱修復分支。
四、如何堅決避免發版混亂?—— 三大紀律
主分支保護原則:
main
?分支是“王冠”,必須設置成保護分支。任何代碼只能通過合并請求進來,且合并請求必須通過CI檢查和至少一個同事的審查。封死直接推送的后門。功能原子化原則:一個合并請求只做一件事(一個功能或一個修復)。堅決反對把多個不相關的修改放在一個分支里提交。這樣代碼審查范圍清晰,回滾風險低。
標簽化發布原則:永遠只部署打了Tag的代碼。Tag就是你的快照。出了問題,一分鐘就能回滾到上一個Tag的版本。嚴禁直接部署某個分支的最新代碼。
總結
這套規范的核心就是:
開發在?
功能分支
?→ 集成到?develop
。發布時用?
發布分支
?隔離測試 → 穩定的代碼合并到?main
?并打Tag。修復從?
main
?的Tag切?熱修復分支
?→ 修復后合并回?main
和develop
。
規則簡單,關鍵在于嚴格執行。尤其是保護主分支和打Tag這兩個動作,是避免混亂的生命線。
操作目的 | 常用 Git 命令 |
---|---|
拉取最新代碼 | git pull origin <branch_name> |
創建/切換分支 | git checkout -b <new_branch_name> |
提交更改 | git add . ?git commit -m "message" |
推送分支 | git push -u origin <branch_name> ?(首次)?git push ?(后續) |
合并分支 | git merge <source_branch> |
打版本標簽 | git tag -a <tag_name> -m "message" |
推送標簽 | git push origin <tag_name> |
刪除本地分支 | git branch -d <branch_name> |
刪除遠程分支 | git push origin --delete <branch_name> |