工作一年多的經驗總結,Git 分支管理實戰指南:創建、合併與衝突解決(建議收藏)!

作者:可樂不是Code
日期:2026年5月24日 下午12:16
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

Git分支管理實戰:隔離風險、有序合併、從容撤銷

整理版摘要

佢係一個開發咗一年多嘅後端開發者,身處小團隊,以前圖方便直接喺 master 提交 code。結果有次領導要睇最新系統功能,佢啱啱改完 code 未測試,冇辦法及時發佈,搞到好尷尬。為咗避免呢種情況再發生,佢強制自己用分支開發,並將工作中最常遇見嘅場景同處理方法整理出嚟,特別適合團隊人數少、或者一個人維護幾個項目嘅開發者參考。

呢篇文章嘅核心觀點係:分支最主要嘅目的係隔離風險,將唔穩定嘅 code 鎖喺獨立分支入面測試,master 永遠保持可發佈狀態。作者按三種常見場景介紹分支使用:開發新功能用 feature 分支、緊急修復線上 bug 用 hotfix 分支、發佈前穩定版本用 release 分支。佢強調命名規範嘅重要性,用前綴分類同短橫線命名,令到分支一目瞭然。合併方面建議小團隊用 merge 就足夠,唔好一開始就追 rebase。

對於合併衝突,佢提出最常見嘅衝突係自己唔同分支之間嘅衝突,因為自己寫嘅 code 反而容易解決。解決衝突最直接嘅方法係用 IDE 一鍵處理,唔使手動刪標記。而如果合併錯咗,就根據推唔推送決定用 reset 定 revert,並畀出三種情況嘅具體指令。總括來講,養成習慣用分支開發,可以避免好多突發尷尬,令開發流程更順暢。

  • 結論:分支嘅核心係隔離風險,master 保持可發佈狀態。
  • 方法:按場景用 feature、hotfix、release 分支,命名用前綴加短橫線。
  • 差異:小團隊用 merge 就夠,rebase 可以等熟練先學。
  • 啟發:合併衝突通常係自己分支之間嘅衝突,用 IDE 解決最快。
  • 可行動點:合併錯咗,未 push 用 reset,已 push 用 revert。
值得記低
筆記

分支命名規範原則

用前綴分類(feature/hotfix/release)加描述,用短橫線分隔,命名明確用途。

流程

分支撤銷操作流程

一、未處理完衝突後悔:git merge --abort;二、合併完成未推送:git reset --hard HEAD~1;三、已推送:git revert -m 1。注意:已推送唔好用 reset。

整理重點

分支隔離風險:由尷尬到從容

作者以前直接喺 master 提交 code,結果領導突擊檢查時冇辦法演示最新功能。呢次尷尬令佢意識到分支嘅核心價值——隔離風險。

隔離風險

將唔穩定嘅 code 鎖喺獨立分支入面測試,master 永遠保持可發佈狀態。咁樣領導幾時睇都得。

master 永遠保持可發佈狀態

  1. 1 開發新功能 → feature 分支:任何新功能都從 master 拉 feature 分支,寫完測試無誤先合返 master。
  2. 2 緊急修復線上 Bug → hotfix 分支:從 master 拉 hotfix 分支,修完直接合返 master 發佈,唔影響其他改動。
  3. 3 準備版本發佈 → release 分支:功能凍結後拉 release 分支,只修 bug 唔加新功能,穩定後合到 master 並打 tag。
整理重點

分支創建與操作:命令同命名規範

作者整理咗幾個最常用嘅分支操作命令,同埋命名規範嘅三個原則。

命令速查

  • 創建並切換分支:git checkout -b <branch-name> 或 git switch -c <branch-name>
  • 查看所有分支:git branch -a
  • 查看分支圖:git log --oneline --graph --all
  • 刪除已合併分支:git branch -d <branch-name>
  • 強制刪除分支:git branch -D <branch-name>

命名規範有三個原則,作者認為前綴帶嚟嘅清晰度係零成本。

前綴帶嚟嘅清晰度係零成本

  1. 1 用 / 分隔類型同名稱:例如 feature/user-login、hotfix/payment-null-pointer、release/v1.2.0,一看就知分支用途。
  2. 2 用短橫線,唔用下劃線:避免工具(如 Jira)將下劃線轉空格搞到連結斷開。
  3. 3 命名要明確用途:例如 fix-payment-null-pointer 比 fix-bug 更清楚,一個月後都知係修邊個 bug。
整理重點

合併與衝突:小團隊用 merge 就夠

合併分支有兩個主流方式:merge 同 rebase。作者建議小團隊用 merge 就夠,rebase 等以後分支多咗、歷史亂咗再學都未遲。

用 merge 就夠

git merge 會產生一個新嘅 merge commit,保留完整歷史,好處係操作簡單、一目瞭然。缺點係分支一多,提交歷史會有分叉線。

保留完整歷史

衝突嘅本質係你改咗某一行,另一個分支都改咗同一行,Git 唔知聽邊個。小團隊最常見嘅衝突係自己唔同分支之間嘅衝突,反而容易解決。

衝突嘅本質係你改咗,佢又改咗

解決衝突步驟:先用 git status 揾到 both modified 嘅檔案,打開檔案解決衝突標記(<<<<<<< HEAD 到 >>>>>>>),然後 git add 同 git commit。實際開發時直接用 IDE 一鍵處理,快好多。

IDE 一鍵處理

整理重點

合併錯咗點撤銷?三條退路

合併錯咗唔好慌,作者按情況提供三條退路。

三條退路

  • 未處理完衝突就後悔:git merge --abort 即刻還原到合併前狀態。
  • 合併完成但未推送:git reset --hard HEAD~1 回退一個 commit,注意會丟棄未提交改動。
  • 已經推送畀其他人:用 git revert -m 1 HEAD 生成一個新 commit 反向撤銷,唔破壞歷史。

另外,如果 hotfix 修復咗 master,記得用 cherry-pick 或者直接 merge 將修復同步到 develop 分支。

cherry-pick

寫在開頭

hi,我是kele

我們公司開發人員不多,為了圖方便,我們的開發人員在大多數情況下的git push都提交在 master ,這其實沒有什麼大問題。久而久之就發現,有時候領導突然要看最新的系統功能,而我剛好改了代碼、沒有測試、沒有辦法及時發佈。所以為了避免日後尷尬,我強制自己用分支開發。

我把工作一年多經常遇到的場景以及處理方法做一個分享。如果你也處在一個小團隊,或者一個人維護着幾個項目,這篇應該能幫你少踩一些坑。

一、什麼時候該創建分支?

分支解決的核心問題就一個:隔離風險

把不穩定的代碼關在獨立分支裏折騰,master 永遠保持可發佈狀態。領導什麼時候看,你什麼時候就能演示。

具體什麼場景需要分支?

場景 1:開發新功能 → feature 分支

你準備開始寫一個新功能了,不管多小,從 master 拉一個 feature 分支出來。

git checkout master
git checkout -b feature/user-login

寫完、測完、確認沒毛病了,再合回 master。功能寫一半時,你隨時可以切回 master 給領導演示,互不干擾。

哪怕是隻有你一個人的項目,這個習慣也能救命——你永遠不知道什麼時候被打斷。

場景 2:緊急修復線上 Bug → hotfix 分支

線上出了一個緊急 bug,從 master 拉 hotfix 分支,修完直接合並回 master 發佈。

git checkout master
git checkout -b hotfix/login-crash

一個命令,幾行修復,合回去就發佈。整個過程 master 上的其他改動不受影響。

注意:如果你同時還有一個 develop 分支在開發中,master 上的 bug 在 develop 上大概率也存在。修完 master 後別忘了一併修復 develop——直接把 hotfix 分支合併到 develop:

git checkout develop
git merge hotfix/login-crash

如果 develop 上改動太大不方便直接 merge,也可以用 cherry-pick 把修復的那個 commit 單獨摘過去:

git checkout develop
git cherry-pick <hotfix-上修復-bug-的-commit-hash>

場景 3:準備版本發佈 → release 分支

功能凍結了,從開發主幹拉一個 release 分支,這個階段只修 bug 不動新功能,穩定後合到 master 並打 tag。

git checkout develop
git checkout -b release/v1.2.0

小團隊可能不常用 release 分支,但如果你有"下週五必須上線"的節點,它就是個閘門,幫你鎖住版本範圍。

別怕建分支,怕的是改崩了回不去。

二、分支怎麼創建和操作?

幾分鐘速覽,備忘性質的。你是有基礎的人,這裏只撿幾個最常用、也最容易搞混的列出來。

基本命令

操作
命令
創建並切換分支
git checkout -b feature/api-refactor
新版切換命令
git switch -c feature/api-refactor
查看所有分支
git branch -a
查看分支圖
git log --oneline --graph --all
刪除已合併分支
git branch -d feature/old-login
強制刪除分支
git branch -D feature/old-login

命名規範,三個原則

1. 用 / 分隔類型和名稱

feature/user-login
hotfix/payment-null-pointer
release/v1.2.0

前綴一眼就能看出這個分支是幹什麼的。你不需要整套 Git Flow,但前綴帶來的清晰度是零成本的。

2. 用短橫線,不用下劃線

feature/user-login (推薦)
feature/user_login 

有些工具(比如 Jira)會把下劃線自動轉成空格,連結斷掉。不是大問題但能避就避。

3. 命名一看就知道幹什麼

fix-payment-null-pointer (推薦)
fix-bug

一個月後你翻到 fix-bug 這個分支,你能想起來是修哪個 bug 嗎?命名是寫給未來的自己看的。

三、合併分支的正確姿勢

合分支有兩個主流方式:merge 和 rebase

對小團隊來說,merge 就夠用了。rebase 留着以後分支多了、歷史亂了再學不遲。

git merge

把目標分支的改動合併到當前分支,產生一個新的 merge commit。

git checkout master
git merge feature/user-login

優點:操作簡單,保留完整歷史,什麼時候合了誰的一目瞭然。 缺點:分支一多,提交歷史會有分叉線。

四、合併衝突了怎麼辦?

衝突的本質很簡單:你改了某個文件的某一行,另一個分支也改了同一行,Git 不知道該聽誰的。

小團隊最常見的衝突其實是你自己不同分支之間的衝突,反而好解決——因為都是自己寫的。

第一步:找到衝突文件

git status

狀態是 both modified 的文件就是衝突文件。

第二步:打開文件,解決衝突標記

<<<<<<< HEAD
const maxRetry = 3;
=======
const maxRetry = 5;
>>>>>>> feature/retry-logic
  • <<<<<<< HEAD 到 ======= 之間:你當前分支的內容
  • ======= 到 >>>>>>> 之間:要合入的分支的內容

第三步:標記已解決並提交

git add .
git commit -m "merge: 解決 retry 配置衝突"

大功告成。

上面的合併步驟瞭解即可,開發的時候直接用 IDE。 VSCode 和 JetBrains 全家桶都有一鍵按鈕,點一下就行,比手動刪標記快十倍。

五、分支合併錯了如何撤銷

合併錯了,第一反應別慌,也別硬着頭皮在錯誤的合併結果上繼續改。你有三條退路,看情況選。

情況 1:正在合併中,衝突還沒處理完

後悔了,不想合了——

git merge --abort

立刻回到 merge 之前的狀態,乾乾淨淨。

情況 2:合併已完成,但還沒推送到遠程

commit 已經生成了,但只有你本地看得到——

git reset --hard HEAD~1

這條命令會把 HEAD 回退一個 commit,也就是撤銷最近一次合併,工作區也一起還原。注意 --hard 會丟棄所有未提交的改動,用之前確認沒有需要保留的東西。

情況 3:已經推送到遠程,別人可能已經 pull 了

這時候不能 reset 了——你回退了,別人的倉庫就跟你對不上。正確做法是用 revert,生成一個新的 commit 來"反向撤銷"那次合併:

git revert -m 1 HEAD

-m 1 的意思是保留主分支(被合入的那一側)的改動,撤銷被合併的分支的改動。這會在不破壞歷史的前提下安全撤銷。

簡單記:沒 push 就用 reset,已經 push 了就用 revert。動了別人也能看到的歷史,就老老實實走 revert。

寫在最後

今天就分享這麼多。

如果對你有用,轉發給你團隊裏那個也一直往 master 上懟的同事。

我們下期再見~