Git 最佳实践
下面是一份 真正实用、生产级的 Git 最佳实践大全,涵盖团队协作、分支、Commit、Tag、版本管理、安全、CI/CD 场景等。
main -> 生产分支(稳定)
develop -> 开发主分支(可选)
feature/* -> 功能分支
hotfix/* -> 生产级紧急修复
release/* -> 发版前合并分支
简化版(适合小团队):
main
feature/*
hotfix/*
- main 永远保持可发布状态
- 开发人员不允许直接推送到 main
- 所有代码必须走 Pull Request / Merge Request
- feature/ 完成后只能合并回 main 或 develop(由流程决定)*
- hotfix/ 优先合并回 main 和 develop*
Commit 规范(强烈推荐)
使用 Conventional Commits:
feat: 新增用户搜索功能
fix: 修复登录失败的问题
docs: 更新安装文档
style: 调整代码格式,未修改逻辑
refactor: 重构用户模块
test: 新增接口单测
chore: 更新依赖
perf: 优化 SQL 查询速度
好处:
- 自动生成 CHANGELOG
- 自动生成版本号(语义化版本)
- 更容易 code review
- CI/CD 自动识别是否需要发版
语义化版本号(Semantic Versioning)
MAJOR.MINOR.PATCH
1.4.23
规则:
- MAJOR:重大破坏更新
- MINOR:新功能(向下兼容)
- PATCH:Bug 修复
生产环境必须打 Tag
git tag -a v1.2.0 -m "Release v1.2.0"
git push origin v1.2.0
Review 内容:
- 是否有 unit test
- 是否破坏 backward compatibility
- 是否满足 coding style
- 是否有安全风险
- 是否有必要拆分 commit
推荐使用 GitLab/Github 的保护策略:
- 禁止 force push
- 禁止直接 push
- 必须通过 CI 检查
项目配置放在 .git/config
git config --global pull.rebase false
git config --global rebase.autoStash true
git config --global core.autocrlf input
git config --global merge.ff false
git config --global fetch.prune true
使用:
- SSH key
- credential helper 指定文件
- CI/CD variables
项目根目录添加 .gitignore:
venv/
node_modules/
*.log
*.pyc
dist/
.env
- 代码合入主分支
- 保留完整历史记录
- 本地 feature 分支整理 commit
- 避免出现过多 merge commit
git checkout feature/login
git fetch
git rebase origin/main
fix conflicts...
git push --force-with-lease
使用:
git push --force-with-lease
避免覆盖别人提交。
git diff
git status
git filter-repo --replace-text ...
git push --force
如果必须提交大文件:
- 使用 Git LFS
- 或者提交 OSS/MinIO 地址
使用 pre-commit:
pre-commit install
添加:
- 自动格式化
- 自动检查黑名单词语
- 自动运行单测
- 禁止调试代码(print、console.log)
克隆仓库必须加:
git fetch --depth=1
减少时间。
CI/CD 不要使用全局 credential helper
使用环境变量:
GIT_USERNAME
GIT_PASSWORD
查看修改历史
git log --oneline --graph --decorate --all
回退到某个版本(保留修改)
git reset --soft HEAD~1
回退(丢弃修改)
git reset --hard HEAD~1
检查是谁改了这行代码
git blame file.py
禁止上传密码与 token
添加 .gitignore:
*.env
*.pem
config.json
避免使用明文密码
优先顺序:
- SSH key
- CI/CD Credential Variables
- 临时 credential helper 文件