把入门换到团队协作时踩过的坑

这次学习 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/) 转载或引用必须申明原指尖魔法屋来源及源地址!