Git代码提交规范和踩坑排水明沟
第一部分:提交前------构建完美提交记录
精准控制暂存区
大多数开发者习惯使用git add .一把抓,但这往往导致无关改动混入提交。更优雅的方式是:
• 交互式暂存:逐块审查改动
bash
git add -p
面对每个代码块时,你可以:
y暂存该块n跳过该块s分割更大块e手动编辑块边界
• 指定路径添加:精确控制范围
bash
git add src/utils/ # 只添加特定目录
git add -u # 只添加已跟踪文件
提交信息规范之道
糟糕的提交信息如同没有注释的代码,规范的提交信息应包含:
<类型>: <简明主题>(50字符内)
<详细说明>(72字符换行)
<关联issue>(可选)
常用类型参考:
- feat:新功能
- fix:错误修复
- refactor:重构(不改变功能)
- docs:文档变更
- test:测试相关
示例典范:
feat: 添加用户JWT认证
- 实现/login接口签发token
- 添加token验证中间件
- 编写Swagger文档
Close #123
第二部分:提交中的技巧------高效工作流
分支管理策略
• 功能分支工作流:每个功能/修复独立分支
bash
git checkout -b feat/user-auth # 创建功能分支
git push -u origin feat/user-auth # 首次推送
• 同步主分支更新 :避免使用纯git pull
bash
git fetch origin # 先获取远程更新
git rebase origin/main # 变基到最新主分支
变基(rebase)相比合并(merge)能保持历史线性清晰,但已推送的分支慎用
暂存与修复技巧
当需要临时切换任务时:
bash
git stash # 保存工作现场
git stash pop # 恢复现场
修改最后一次提交:
bash
git commit --amend # 修改提交信息或内容
git push -f # 强制更新(仅限未协作分支)
第三部分:提交后的救赎------常见故障处理
推送冲突解决方案
当遇到! [rejected] master -> master (non-fast-forward)错误时:
bash
git fetch origin # 获取远程更新
git merge origin/master # 合并远程变更
# 或更推荐
git rebase origin/master # 变基本地提交
git push # 重新推送
历史修改高阶技巧
• 交互式变基:修改多个历史提交
bash
git rebase -i HEAD~3 # 编辑最近3次提交
在编辑界面可以:
- reword:修改提交信息
- edit:暂停修改内容
- squash:合并提交
- drop:删除提交
• 安全强制推送:避免覆盖同事代码
bash
git push --force-with-lease # 检查是否有未知更新
敏感信息泄露处理
当误提交密码或密钥文件后:
bash
git rm --cached config/.env # 停止跟踪
echo ".env" >> .gitignore # 加入忽略
git commit -m "移除敏感文件"
git push
对于已推送到远程的历史记录,需要使用git filter-branch彻底清除
第四部分:团队协作规范------减少冲突的艺术
代码评审最佳实践
• 小步提交 :每个PR保持200行内改动
• 明确Reviewer:通过配置自动指定
bash
# .git/config配置示例
[remote "origin"]
push = HEAD:refs/for/master%r=team1@example.com,r=team2@example.com
• 解决合并冲突:
bash
git diff # 查看冲突
# 手动编辑冲突文件(删除<<< === >>>标记)
git add resolved-file.txt
git rebase --continue # 或git commit
分支清理策略
定期清理已合并分支保持仓库整洁:
bash
# 列出已合并到master的分支
git branch --merged master | grep -v '^\*\|master'
# 删除本地分支
git branch -d branch-name
# 删除远程分支
git push origin --delete branch-name
第五部分:高级场景应对
大型文件误提交处理
当不小心提交了大文件导致推送失败:
bash
git rm --cached huge-file.zip
git commit --amend
git push
如需彻底清除历史记录中的大文件,需使用git filter-repo工具
多仓库协作技巧
当需要从多个远程仓库同步时:
bash
git remote add upstream https://github.com/original/repo.git
git fetch upstream
git merge upstream/main
子模块更新策略
bash
git submodule update --init --recursive # 首次克隆
git submodule update --remote # 更新子模块