适用人群:所有开发者
难度:低-中
预计学习时间:5-8小时
Git 工作流对比
| 工作流 | 适合团队 | 复杂度 | 特点 |
|---|
| Trunk-Based | 小团队 | 低 | 直接在main开发 |
| Git Flow | 大团队 | 高 | 多分支模型 |
| GitHub Flow | 中小团队 | 低 | PR为主 |
| GitLab Flow | 中大团队 | 中 | 环境分支 |
GitHub Flow(推荐)
工作流程:
main (生产环境)
│
├── feature/login (功能分支)
│ ↓ 开发完成
│ Pull Request → Code Review → CI测试
│ ↓ 通过
│ Merge to main
│ ↓ 自动部署
│
├── feature/dashboard
└── fix/header-bug
命令:
# 1. 创建功能分支
git checkout -b feature/login
# 2. 开发并提交
git add .
git commit -m "feat: add login page"
# 3. 推送并创建PR
git push origin feature/login
# 在GitHub上创建Pull Request
# 4. Code Review通过后合并
# 在GitHub上点击 "Merge pull request"
# 5. 拉取最新代码
git checkout main
git pull
Commit 规范(Conventional Commits)
格式:<type>(<scope>): <description>
type类型:
feat: 新功能
fix: 修复bug
docs: 文档
style: 格式(不影响功能)
refactor: 重构
test: 测试
chore: 构建/工具
perf: 性能优化
ci: CI配置
示例:
feat(auth): add Google OAuth login
fix(api): handle null response in /users
docs(readme): update installation steps
refactor(utils): extract date formatting
chore(deps): update Next.js to 14.2
perf(db): add index for user email column
test(auth): add login integration tests
好处:
- 自动生成CHANGELOG
- 方便筛选特定类型的提交
- 语义化版本自动推断
Git 常用命令速查
# 分支操作
git branch # 查看分支
git branch -a # 查看所有分支(含远程)
git checkout -b feature/xxx # 创建并切换分支
git branch -d feature/xxx # 删除分支
git branch -D feature/xxx # 强制删除
# 暂存操作
git stash # 暂存当前修改
git stash pop # 恢复暂存
git stash list # 查看暂存列表
git stash drop # 删除暂存
# 撤销操作
git checkout -- file.txt # 撤销文件修改
git reset HEAD file.txt # 取消暂存
git reset --soft HEAD~1 # 撤销提交保留修改
git reset --hard HEAD~1 # 撎销提交丢弃修改(危险!)
git revert <commit> # 创建反向提交
# 查看历史
git log --oneline # 简洁日志
git log --graph --oneline # 图形化日志
git log -p file.txt # 文件修改历史
git blame file.txt # 查看每行谁改的
git diff # 工作区 vs 暂存区
git diff --staged # 暂存区 vs 上次提交
git diff main..feature # 两个分支差异
# 标签
git tag v1.0.0 # 创建标签
git tag -a v1.0.0 -m "v1.0.0" # 带注释的标签
git push origin v1.0.0 # 推送标签
git push origin --tags # 推送所有标签
# 变基
git rebase main # 将当前分支变基到main
git rebase -i HEAD~3 # 交互式变基(合并提交)
# cherry-pick
git cherry-pick <commit> # 摘取特定提交
.gitignore 模板
# Node.js
node_modules/
.env
.env.local
dist/
build/
*.log
# Python
__pycache__/
*.pyc
.venv/
venv/
.env
# IDE
.vscode/
.idea/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
# 调试/测试
coverage/
.nyc_output/
团队协作最佳实践
1. 每天至少pull一次main分支
2. 功能分支生命周期不超过3天
3. PR不超过300行改动
4. 每个PR都要Code Review
5. CI通过才能合并
6. 合并后删除功能分支
7. 使用Squash Merge保持main历史清晰
8. 重要的操作写在PR描述中