Git 是目前最流行的分布式版本控制系统。本文分享 Git 工作流的最佳实践,帮助团队更高效地协作。

分支管理策略

Git Flow

Git Flow 是一种经典的分支模型:

1
2
3
4
5
6
master (main)  ─────●────────────●──────>
\ ^
\ /
develop ●────────●────●──────────●───>
\ \ \ /
feature ●──●──● hotfix ●──●────●──●──●──>

主要分支:

  • master/main: 生产环境代码
  • develop: 开发主分支
  • feature/*: 功能开发分支
  • release/*: 发布准备分支
  • hotfix/*: 紧急修复分支

GitHub Flow

更简化的工作流:

1
2
3
4
main ●────────●────────●────────●───>
\ \ \ \
feature ●──●──●──● feature ●──●──●──●
(PR) (PR)

特点:

  • 只有一个长期分支 main
  • 所有开发通过 Pull Request 进行
  • 持续部署友好

提交规范

Conventional Commits

1
2
3
4
5
6
# 格式
<type>(<scope>): <subject>

<body>

<footer>

类型 (type):

  • feat: 新功能
  • fix: Bug 修复
  • docs: 文档更新
  • style: 代码格式(不影响功能)
  • refactor: 重构
  • perf: 性能优化
  • test: 测试相关
  • chore: 构建/工具配置

示例:

1
2
3
4
5
git commit -m "feat(auth): add user login feature"

git commit -m "fix(api): resolve timeout issue on user endpoint"

git commit -m "docs(readme): update installation instructions"

Commitizen 工具

安装 Commitizen 自动化提交:

1
2
npm install -g commitizen cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc

使用 git cz 替代 git commit

常用 Git 命令

分支操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建并切换分支
git checkout -b feature/new-feature

# 切换分支
git switch develop

# 删除本地分支
git branch -d feature/old-feature

# 删除远程分支
git push origin --delete feature/old-feature

# 重命名分支
git branch -m old-name new-name

暂存操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 暂存所有修改
git stash save "暂存描述"

# 查看暂存列表
git stash list

# 恢复暂存
git stash pop

# 恢复指定暂存
git stash apply stash@{1}

# 删除暂存
git stash drop stash@{0}

撤销操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 撤销工作区修改
git restore file.js

# 撤销暂存区修改
git restore --staged file.js

# 撤销最后一次提交(保留修改)
git reset --soft HEAD~1

# 撤销最后一次提交(丢弃修改)
git reset --hard HEAD~1

# 修改最后一次提交信息
git commit --amend

# 修改最后一次提交内容
git add file.js
git commit --amend --no-edit

变基 (Rebase)

1
2
3
4
5
6
7
8
9
10
# 将当前分支变基到 main
git rebase main

# 交互式变基(修改历史提交)
git rebase -i HEAD~3

# 变基时自动解决冲突
git rebase --continue
git rebase --skip
git rebase --abort

Pull Request 最佳实践

PR 标题和描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## 功能描述
简要描述本次 PR 的内容和目的

## 改动点
- [ ] 改动1
- [ ] 改动2
- [ ] 改动3

## 测试情况
- [ ] 单元测试通过
- [ ] 手动测试通过
- [ ] 代码审查通过

## 相关 Issue
Closes #123

代码审查清单

  • 代码风格符合项目规范
  • 有充分的单元测试
  • 没有引入新的安全漏洞
  • 性能影响可接受
  • 文档已更新

.gitignore 最佳实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 依赖
node_modules/

# 构建产物
dist/
build/
public/

# 环境变量
.env
.env.local

# IDE
.idea/
.vscode/
*.swp
*.swo

# 操作系统
.DS_Store
Thumbs.db

# 日志
*.log
npm-debug.log*

# 临时文件
*.tmp
.cache/

Git Hook

Husky + lint-staged

1
2
3
npm install husky lint-staged --save-dev
npx husky install
npx husky add .husky/pre-commit "npx lint-staged"
1
2
3
4
5
6
7
8
// package.json
{
"lint-staged": {
"*.{js,jsx}": ["eslint --fix", "prettier --write"],
"*.{css,scss}": ["stylelint --fix", "prettier --write"],
"*.{json,md}": ["prettier --write"]
}
}

常见问题解决

合并冲突

1
2
3
4
5
6
7
8
9
10
11
# 1. 查看冲突文件
git status

# 2. 手动解决冲突
# 编辑冲突文件,保留需要的代码

# 3. 标记冲突已解决
git add conflicted-file.js

# 4. 完成合并
git commit

恢复丢失的提交

1
2
3
4
5
6
# 查看所有操作记录
git reflog

# 恢复指定提交
git checkout SHA
git branch recovery-branch

总结

良好的 Git 工作流是团队协作的基础。选择适合团队的分支策略,遵循提交规范,善用工具自动化流程,可以大大提升开发效率。