把入门换到团队协作时踩过的坑
这次学习 Git,从基础命令到团队协作,。很多人一上来就讲把入门换到团队协作时踩过的坑的全景图;我更想先把这次卡住的点说清楚。
基础命令
初始化和配置
# 初始化仓库
git init
# 克隆仓库
git clone https://github.com/example/repo.git
# 配置用户信息
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
# 查看配置
git config --list
基本操作
# 查看状态
git status
# 添加文件到暂存区
git add file.txt
git add . # 添加所有文件
git add *.js # 添加所有 js 文件
# 提交更改
git commit -m "Add feature"
# 查看历史
git log
git log --oneline # 简洁历史
git log --graph --pretty=format:'%Cred%h%Creset -%C(bold blue)%an%Creset %s' --all # 彩色图形
分支操作
# 创建分支
git branch feature/new-feature
# 切换分支
git checkout feature/new-feature
git checkout -b feature/new-feature # 创建并切换
# 合并分支
git checkout main
git merge feature/new-feature
# 删除分支
git branch -d feature/new-feature # 删除已合并分支
git branch -D feature/new-feature # 强制删除
高级操作
变基操作
# 交互式变基
git rebase -i HEAD~3
# 变基到上游分支
git rebase origin/main
# 解决冲突后继续变基
git add .
git rebase --continue
# 取消变基
git rebase --abort
暂存工作
# 暂存当前工作
git stash
# 暂存并添加消息
git stash save "Work in progress"
# 查看暂存列表
git stash list
# 应用暂存
git stash apply
git stash pop # 应用并删除
# 删除暂存
git stash drop
标签操作
# 创建轻量标签
git tag v1.0.0
# 创建带注释的标签
git tag -a v1.0.0 -m "Version 1.0.0"
# 查看标签
git tag
git show v1.0.0
# 推送标签
git push origin v1.0.0
git push origin --tags # 推送所有标签
团队协作
Pull Request 流程
# 1. 从主分支创建功能分支
git checkout -b feature/new-feature
# 2. 进行开发
git add .
git commit -m "Add new feature"
# 3. 推送分支
git push -u origin feature/new-feature
# 4. 在 GitHub 上创建 Pull Request
# 5. 等待代码审查和合并
# 6. 合并后更新本地主分支
git checkout main
git pull origin main
# 7. 删除功能分支
git branch -d feature/new-feature
git push origin --delete feature/new-feature
解决冲突
# 合并时出现冲突
git merge feature/new-feature
# 查看冲突文件
git status
# 解决冲突(编辑文件)
# <<<<<<< HEAD
# 主分支的内容
# =======
# 功能分支的内容
# >>>>>>> feature/new-feature
# 解决后标记为已解决
git add .
# 完成合并
git commit -m "Merge feature/new-feature"
Git Hooks
# 安装 pre-commit
pip install pre-commit
# 配置 .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
args: ['--maxkb=1000']
# 安装 hooks
pre-commit install
# 手动运行
pre-commit run --all-files
工作流程
Git Flow 工作流
# 1. 从 develop 创建功能分支
git checkout develop
git checkout -b feature/new-feature
# 2. 开发完成后合并到 develop
git checkout develop
git merge feature/new-feature
# 3. 从 develop 创建 release 分支
git checkout -b release/1.0.0
# 4. 测试完成后合并到 main 和 develop
git checkout main
git merge release/1.0.0
git checkout develop
git merge release/1.0.0
# 5. 创建标签
git tag -a v1.0.0 -m "Version 1.0.0"
GitHub Flow 工作流
# 1. 创建功能分支
git checkout -b feature/new-feature
# 2. 开发完成后推送到远程
git push -u origin feature/new-feature
# 3. 创建 Pull Request 到 main
# 4. 审查通过后合并到 main
# 5. 部署 main 分支
# 6. 本地同步
git checkout main
git pull origin main
踩过的坑
坑一:提交历史混乱
没有正确使用 rebase,导致提交历史混乱。
解决:使用交互式 rebase 整理历史。
# 整理最近的 3 次提交
git rebase -i HEAD~3
# 编辑提交历史:
# pick 123456 Add feature A
# squash 123457 Fix bug in A
# squash 123458 Add tests for A
# 保存后编辑提交消息
坑二:错误的 commit
提交了错误的文件或信息。
解决:使用 git commit –amend 或 git reset。
# 修改最后一次提交
git commit --amend --no-edit
git commit --amend -m "New message"
# 撤销最后一次提交(保留更改)
git reset --soft HEAD~1
# 撤销最后一次提交(丢弃更改)
git reset --hard HEAD~1
坑三:敏感信息泄露
提交了敏感信息。
解决:使用 git filter-branch 或 BFG Repo-Cleaner。
# 从历史中删除文件
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch sensitive.txt' \
--prune-empty --tag-name-filter cat -- --all
# 或使用 BFG
java -jar bfg.jar --delete-files sensitive.txt
git reflog expire --expire=now --all
git gc --prune=now --aggressive
写在最后
Git 这东西,不只是工具,是协作文化。
解决了:
- 版本控制
- 代码回退
- 团队协作
带来了:
- 学习成本
- 冲突处理
- 工作流程
使用之前先评估:
- 团队规模
- 项目复杂度
- 工作流程需求
不是所有项目都需要复杂的 Git 工作流程,有时候简单分支就够用。
这次 Git 学习花了一个月,从基础命令到团队协作。学习完成后,团队协作效率提升了 50%,代码回滚时间从 30 分钟降到 5 分钟。
版权声明: 本文首发于 指尖魔法屋-把入门换到团队协作时踩过的坑(https://blog.thinkmoon.cn/post/98-git-practice-beginner-team-collaboration-guide/) 转载或引用必须申明原指尖魔法屋来源及源地址!
评论
使用 GitHub 账号登录后即可留言,支持 Markdown。