git-旧项目继续开发新功能,同时还要维护线上版本

🧭 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 文件会:

  1. 检测系统类型;
  2. 自动调用对应的 git-branch.ps1git-branch.sh
  3. 参数原样透传。

🚀 三、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

🧰 五、权限与兼容性

  1. Linux / macOS 下需要执行:

    bash 复制代码
    chmod +x scripts/git-branch.sh
    chmod +x scripts/git.js
  2. Windows 用户需安装 PowerShell(系统自带);

  3. 确保项目根目录 .huskyscripts 已被 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 版本
相关推荐
fendouweiqian6 小时前
git提交与commitlint规则
git
C.咖.14 小时前
Linux环境下——Git 与 GitHub
linux·git·github·远程仓库
杂鱼豆腐人16 小时前
pnpm环境下防止误使用npm的方法
前端·git·npm·node.js·git bash
摇滚侠17 小时前
GIT版本管理工具轻松入门 | TortoiseGit,Git 介绍软件安装配置,笔记01
笔记·git
山有木兮木有枝_19 小时前
“误操作导致 feat 功能未生效,尽管 merge 已完成”
git
百锦再19 小时前
第14章 智能指针
android·java·开发语言·git·rust·go·错误
摇滚侠19 小时前
GIT版本管理工具轻松入门 | TortoiseGit,解决冲突,笔记07
笔记·git
一点事1 天前
windows:git下载安装
git
不说别的就是很菜1 天前
【前端面试】Git篇
前端·git