🧭 Git 分支管理实战速查表
🌲 一、推荐分支结构
| 分支名 | 用途 | 来源 | 合并去向 |
|---|---|---|---|
main |
线上稳定分支 | - | - |
develop |
开发主分支 | main |
release |
feature/xxx |
功能开发分支 | develop |
develop |
hotfix/xxx |
紧急修复分支 | main |
main + develop |
release/x.x.x |
测试预发布分支 | develop |
main + develop |
🚀 二、常用操作场景
✅ 场景1:开发一个新功能
示例:开发会员中心功能
bash
# 1. 切换到开发主线
git checkout develop
git pull origin develop
# 2. 创建功能分支
git checkout -b feature/member-center
# 3. 开发代码...
# 4. 提交修改
git add .
git commit -m "feat: 新增会员中心功能"
# 5. 推送远程
git push origin feature/member-center
# ✅ 6. 功能完成后合并回 develop
git checkout develop
git pull
git merge feature/member-center
git push origin develop
# 7. 可选:删除功能分支
git branch -d feature/member-center
git push origin --delete feature/member-center
🩹 场景2:修复线上 bug
示例:修复登录异常问题
bash
# 1. 切换到线上主分支
git checkout main
git pull origin main
# 2. 从 main 创建 hotfix 分支
git checkout -b hotfix/fix-login-bug
# 3. 修复问题...
# 4. 提交修改
git add .
git commit -m "fix: 修复登录异常问题"
git push origin hotfix/fix-login-bug
# ✅ 5. 合并回 main 并打版本标签
git checkout main
git merge hotfix/fix-login-bug
git tag -a v1.0.1 -m "修复登录异常问题"
git push origin main --tags
# ✅ 6. 同步 develop
git checkout develop
git merge hotfix/fix-login-bug
git push origin develop
🧪 场景3:准备上线(创建 release 测试分支)
示例:准备发布 v1.1.0
bash
# 1. 从 develop 创建 release 分支
git checkout develop
git pull origin develop
git checkout -b release/v1.1.0
# 2. 测试/修复阶段...
git commit -m "chore: 调整打包配置"
# 3. 合并到 main
git checkout main
git merge release/v1.1.0
git tag -a v1.1.0 -m "v1.1.0 发布"
git push origin main --tags
# ✅ 4. 同步 develop,保证代码一致
git checkout develop
git merge release/v1.1.0
git push origin develop
# 5. 可选:删除 release 分支
git branch -d release/v1.1.0
git push origin --delete release/v1.1.0
🧹 场景4:拉取最新代码并同步分支
bash
git fetch --all
git pull origin develop
git pull origin main
📦 场景5:查看与清理分支
bash
# 查看本地分支
git branch
# 查看远程分支
git branch -r
# 删除本地分支
git branch -d feature/old-feature
# 删除远程分支
git push origin --delete feature/old-feature
🧱 三、分支命名规范建议
| 类型 | 命名格式 | 示例 |
|---|---|---|
| 新功能 | feature/模块-功能 |
feature/user-login |
| 修复 | hotfix/问题描述 |
hotfix/fix-crash |
| 预发布 | release/版本号 |
release/v1.1.0 |
| 文档或配置 | chore/任务描述 |
chore/update-readme |
🔐 四、保护分支建议(防止误操作)
在 Gitee / GitHub 中:
- ✅ 设置
main为 受保护分支(禁止直接 push)。 - ✅ 所有修改必须通过 PR / MR 审核合并。
- ✅ CI/CD 可以只监听
main分支的变更触发构建。
💡 五、版本标记规范(tag)
bash
# 打 tag
git tag -a v1.2.0 -m "版本说明"
# 推送 tag
git push origin v1.2.0
# 或推送所有标签
git push origin --tags
# 查看 tag
git tag
# 删除 tag
git tag -d v1.0.0
git push origin --delete v1.0.0
✅ 六、完整流程回顾图
┌────────────┐
│ main │◀───┐
└────┬───────┘ │
│ │
▼ │
┌────────────┐ │
│ release/x.x│─────┘
└────┬───────┘
│
▼
┌────────────┐
│ develop │
├────┬───────┘
│ │
┌────┘ └────┐
▼ ▼
feature/login feature/member
拓展✅
本地分支管理命令工具脚本(bash 或 PowerShell)
Git 分支PowerShell自动化工具方案,在旧项目中:
一行命令就能创建分支、自动推送远程、合并、删除,极大提高效率 🚀
🧰 一、功能目标
实现以下命令自动化流程:
| 命令 | 功能 |
|---|---|
pnpm git:feature login |
创建功能分支 feature/login 并推送远程 |
pnpm git:hotfix fix-login |
创建修复分支 hotfix/fix-login 并推送远程 |
pnpm git:release 1.2.0 |
创建预发布分支 release/v1.2.0 |
pnpm git:merge develop |
把当前分支合并到 develop |
pnpm git:clean |
清理已合并的本地分支 |
⚙️ 二、实现方式(PowerShell + pnpm)
在项目根目录下新建文件
📄 scripts/git-branch.ps1
🔧 完整脚本代码(PowerShell 版本)
powershell
param(
[Parameter(Mandatory = $true)]
[string]$Type,
[Parameter(Mandatory = $false)]
[string]$Name
)
function Exec($cmd) {
Write-Host "▶ $cmd" -ForegroundColor Cyan
iex $cmd
if ($LASTEXITCODE -ne 0) {
Write-Host "❌ 命令执行失败,已终止。" -ForegroundColor Red
exit 1
}
}
# 获取当前分支
$currentBranch = git rev-parse --abbrev-ref HEAD
switch ($Type) {
"feature" {
if (-not $Name) { Write-Host "❌ 请输入功能名称,如: pnpm git:feature login"; exit 1 }
$branch = "feature/$Name"
Exec "git checkout develop"
Exec "git pull origin develop"
Exec "git checkout -b $branch"
Exec "git push origin $branch"
Write-Host "✅ 功能分支已创建并推送:$branch"
}
"hotfix" {
if (-not $Name) { Write-Host "❌ 请输入修复名称,如: pnpm git:hotfix fix-login"; exit 1 }
$branch = "hotfix/$Name"
Exec "git checkout main"
Exec "git pull origin main"
Exec "git checkout -b $branch"
Exec "git push origin $branch"
Write-Host "✅ 修复分支已创建并推送:$branch"
}
"release" {
if (-not $Name) { Write-Host "❌ 请输入版本号,如: pnpm git:release 1.2.0"; exit 1 }
$branch = "release/v$Name"
Exec "git checkout develop"
Exec "git pull origin develop"
Exec "git checkout -b $branch"
Exec "git push origin $branch"
Write-Host "✅ 预发布分支已创建并推送:$branch"
}
"merge" {
if (-not $Name) { Write-Host "❌ 请输入要合并到的目标分支,如: pnpm git:merge develop"; exit 1 }
Exec "git fetch --all"
Exec "git checkout $Name"
Exec "git pull origin $Name"
Exec "git merge $currentBranch"
Exec "git push origin $Name"
Write-Host "✅ 当前分支已合并到 $Name 并推送。"
}
"clean" {
Write-Host "🧹 清理已合并的本地分支..."
git fetch --prune
git branch --merged | Select-String -NotMatch "main|develop" | ForEach-Object {
$branchName = $_.ToString().Trim()
if ($branchName -ne "*") {
Exec "git branch -d $branchName"
}
}
Write-Host "✅ 清理完成。"
}
Default {
Write-Host "❌ 未知命令类型,请使用以下之一:" -ForegroundColor Yellow
Write-Host "feature | hotfix | release | merge | clean"
exit 1
}
}
📦 三、在 package.json 中添加命令
json
"scripts": {
"git:feature": "pwsh ./scripts/git-branch.ps1 feature",
"git:hotfix": "pwsh ./scripts/git-branch.ps1 hotfix",
"git:release": "pwsh ./scripts/git-branch.ps1 release",
"git:merge": "pwsh ./scripts/git-branch.ps1 merge",
"git:clean": "pwsh ./scripts/git-branch.ps1 clean"
}
💡 需要 PowerShell ≥ v7,Windows 默认支持。
如果在 macOS/Linux,可改为 Bash 版本(我可为你转换)。
🧪 四、使用示例
bash
# 创建功能分支
pnpm git:feature member-center
# 创建修复分支
pnpm git:hotfix fix-login
# 创建预发布分支
pnpm git:release 1.2.0
# 合并当前分支到 develop
pnpm git:merge develop
# 清理已合并分支
pnpm git:clean
输出示例:
▶ git checkout develop
▶ git pull origin develop
▶ git checkout -b feature/member-center
▶ git push origin feature/member-center
✅ 功能分支已创建并推送:feature/member-center
🧱 五、建议配合 husky 自动检测
可以让你在提交代码时自动运行 lint 检查与分支命名校验:
bash
# .husky/pre-commit
#!/usr/bin/env sh
. "$(dirname "$0")/_/husky.sh"
# 1. 确保分支命名规范
branch=$(git branch --show-current)
if ! echo "$branch" | grep -E -q "^(feature|hotfix|release)/"; then
echo "❌ 分支命名不规范!必须以 feature/、hotfix/ 或 release/ 开头。"
exit 1
fi
# 2. 执行 lint 检查
npx lint-staged
Bash 版本 (git-branch.sh) ,
保证团队在 Windows、macOS、Linux 都能用。
🧩 一、目录结构建议
project-root/
├── scripts/
│ ├── git-branch.ps1 # Windows 用
│ ├── git-branch.sh # Mac/Linux/Git Bash 用 ✅
├── package.json
└── ...
🧠 二、scripts/git-branch.sh
bash
#!/usr/bin/env bash
set -e # 一旦命令出错立即退出
# 🚀 统一输出颜色
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # 无颜色
# 🧩 获取当前分支
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "none")
# 🧰 工具函数
function exec_cmd() {
echo -e "${YELLOW}→ $1${NC}"
eval "$1"
}
function error_exit() {
echo -e "${RED}❌ $1${NC}"
exit 1
}
# 🧱 获取参数
ACTION=$1
NAME=$2
if [ -z "$ACTION" ]; then
echo -e "${RED}❌ 缺少参数!${NC}"
echo "用法示例:"
echo " pnpm git:feature login-page"
echo " pnpm git:release 1.3.0"
exit 1
fi
case $ACTION in
# ========== 创建功能分支 ==========
feature)
if [ -z "$NAME" ]; then error_exit "请输入功能名称"; fi
BRANCH="feature/$NAME"
exec_cmd "git checkout develop"
exec_cmd "git pull origin develop"
exec_cmd "git checkout -b $BRANCH"
echo -e "${GREEN}✅ 创建功能分支:$BRANCH${NC}"
;;
# ========== 创建修复分支 ==========
hotfix)
if [ -z "$NAME" ]; then error_exit "请输入修复名称"; fi
BRANCH="hotfix/$NAME"
exec_cmd "git checkout main"
exec_cmd "git pull origin main"
exec_cmd "git checkout -b $BRANCH"
echo -e "${GREEN}✅ 创建修复分支:$BRANCH${NC}"
;;
# ========== 创建预发布分支 ==========
release)
if [ -z "$NAME" ]; then error_exit "请输入版本号"; fi
BRANCH="release/v$NAME"
exec_cmd "git checkout develop"
exec_cmd "git pull origin develop"
exec_cmd "git checkout -b $BRANCH"
echo -e "${GREEN}✅ 创建预发布分支:$BRANCH${NC}"
;;
# ========== 合并当前分支到 develop ==========
merge-dev)
exec_cmd "git fetch --all"
exec_cmd "git checkout develop"
exec_cmd "git pull origin develop"
exec_cmd "git merge $CURRENT_BRANCH"
exec_cmd "git push origin develop"
echo -e "${GREEN}✅ 已合并到 develop 分支${NC}"
;;
# ========== 发布版本到 main ==========
publish)
if [ -z "$NAME" ]; then error_exit "请输入版本号,如:pnpm git:publish 1.3.0"; fi
TAG="v$NAME"
exec_cmd "git fetch --all"
exec_cmd "git checkout main"
exec_cmd "git pull origin main"
exec_cmd "git merge release/$TAG"
exec_cmd "git push origin main"
exec_cmd "git tag $TAG"
exec_cmd "git push origin $TAG"
echo -e "${GREEN}🎉 发布完成:$TAG${NC}"
;;
# ========== 清理本地已合并分支 ==========
clean)
exec_cmd "git fetch -p"
exec_cmd "git branch --merged | egrep -v '(^\*|main|develop)' | xargs git branch -d"
echo -e "${GREEN}🧹 已清理本地已合并分支${NC}"
;;
*)
error_exit "未知命令:$ACTION"
;;
esac
🧩 三、添加执行权限
仅需在 Mac 或 Linux 环境执行一次:
bash
chmod +x scripts/git-branch.sh
🧰 四、在 package.json 中配置命令
json
"scripts": {
"git:feature": "bash ./scripts/git-branch.sh feature",
"git:hotfix": "bash ./scripts/git-branch.sh hotfix",
"git:release": "bash ./scripts/git-branch.sh release",
"git:merge-dev": "bash ./scripts/git-branch.sh merge-dev",
"git:publish": "bash ./scripts/git-branch.sh publish",
"git:clean": "bash ./scripts/git-branch.sh clean"
}
💡 Windows 系统依然使用
pwsh ./scripts/git-branch.ps1。跨平台团队可以根据系统自动选择运行哪个版本
🧩 五、使用示例(全平台通用)
| 场景 | 命令 | 说明 |
|---|---|---|
| 开发新功能 | pnpm git:feature login |
从 develop 创建分支 |
| 修复线上 bug | pnpm git:hotfix fix-login |
从 main 创建 |
| 发布前测试 | pnpm git:release 1.5.0 |
创建预发布分支 |
| 合并到开发主线 | pnpm git:merge-dev |
自动合并 |
| 发布正式版本 | pnpm git:publish 1.5.0 |
合并 release → main 并打 tag |
| 清理旧分支 | pnpm git:clean |
删除已合并分支 |
👉 自动检测当前系统(Windows 用 PowerShell,Mac/Linux 用 Bash) 就自动调用对应脚本,无需区分平台。
✅ 一条命令自动适配系统(Windows / macOS / Linux)
✅ 统一命令格式(pnpm git feature login)
✅ 集成功能开发、发布、合并、清理全流程
🧩 一、最终效果示例
| 功能 | 命令 | 执行效果 |
|---|---|---|
| 创建新功能分支 | pnpm git feature login |
从 develop 创建 feature/login |
| 创建修复分支 | pnpm git hotfix pay-bug |
从 main 创建 hotfix/pay-bug |
| 创建发布分支 | pnpm git release 1.2.0 |
从 develop 创建 release/v1.2.0 |
| 合并当前分支到 develop | pnpm git merge-dev |
自动合并并推送 |
| 发布正式版本 | pnpm git publish 1.2.0 |
合并 release→main 并打 tag |
| 清理已合并分支 | pnpm git clean |
删除本地多余分支 |
🧠 二、实现思路(跨平台统一入口)
我们创建一个入口脚本:
scripts/git.js
这个 JS 文件会:
- 检测系统类型;
- 自动调用对应的
git-branch.ps1或git-branch.sh; - 参数原样透传。
🚀 三、scripts/git.js
js
#!/usr/bin/env node
import { execSync } from 'child_process';
import os from 'os';
const args = process.argv.slice(2);
if (args.length === 0) {
console.error('❌ 缺少参数,例如:pnpm git feature login');
process.exit(1);
}
const platform = os.platform();
const isWindows = platform === 'win32';
const script = isWindows
? 'scripts/git-branch.ps1'
: 'scripts/git-branch.sh';
const command = isWindows
? `pwsh ./${script} ${args.join(' ')}`
: `bash ./${script} ${args.join(' ')}`;
try {
console.log(`🚀 正在执行: ${command}\n`);
execSync(command, { stdio: 'inherit' });
} catch (err) {
console.error(`❌ 命令执行失败:${err.message}`);
process.exit(1);
}
✅ 说明:
- Node 自动识别当前操作系统;
- Windows 调用 PowerShell 脚本;
- 其他系统用 Bash;
- 参数(如
feature login)自动传递。
📦 四、在 package.json 中新增命令
json
"scripts": {
"git": "node ./scripts/git.js"
}
之后所有命令都可统一写成:
bash
pnpm git feature login
pnpm git hotfix fix-bug
pnpm git release 1.2.0
pnpm git merge-dev
pnpm git publish 1.2.0
pnpm git clean
🧰 五、权限与兼容性
-
Linux / macOS 下需要执行:
bashchmod +x scripts/git-branch.sh chmod +x scripts/git.js -
Windows 用户需安装 PowerShell(系统自带);
-
确保项目根目录
.husky、scripts已被 Git 追踪(非忽略状态)。
⚡ 六、最佳实践建议
| 项目阶段 | 建议分支操作 |
|---|---|
| 开发新功能 | 使用 pnpm git feature xxx,所有功能均基于 develop |
| 修复线上紧急问题 | 使用 pnpm git hotfix xxx,基于 main |
| 准备上线 | 使用 pnpm git release x.x.x 进行预发布 |
| 验收通过 | pnpm git publish x.x.x 自动打 tag、合并主分支 |
| 定期清理 | pnpm git clean 删除已合并分支 |
🧱 七、整体结构总结
scripts/
├── git.js # 统一入口(自动识别系统)
├── git-branch.ps1 # Windows 版本
└── git-branch.sh # Mac/Linux 版本