git进阶08_完整实战场景演练

完整实战场景演练

本章目标:通过 6 个完整的实战场景,把前面所有知识串起来,达到"跟实战了一个月"的效果。


场景一:入职第一天 --- 项目初始化

假设你在联通产业互联网公司刚入职,leader 给你分配了一个新项目。

步骤

bash 复制代码
# ===== 1. 配置 Git(如果还没配) =====
git config --global user.name "zhangsan"
git config --global user.email "zhangsan@chinaunicom.cn"
git config --global core.autocrlf true
git config --global pull.rebase true
git config --global push.default current
git config --global init.defaultBranch main

# ===== 2. 生成 SSH 密钥 =====
ssh-keygen -t ed25519 -C "zhangsan@chinaunicom.cn"
# 一路回车
cat ~/.ssh/id_ed25519.pub
# 复制公钥,添加到公司 GitLab

# ===== 3. 测试 SSH 连接 =====
ssh -T git@gitlab.your-company.com

# ===== 4. 克隆项目 =====
git clone git@gitlab.your-company.com:team/project-name.git
cd project-name

# ===== 5. 查看项目结构 =====
git log --oneline --graph --all --decorate
git branch -a
cat .gitignore
cat README.md
cat .gitlab-ci.yml  # 或 Jenkinsfile

# ===== 6. 阅读 CI/CD 配置 =====
# 了解项目的 CI/CD 流程
cat .gitlab-ci.yml
# 了解有哪些阶段,每个阶段做什么

检查清单

复制代码
□ Git 已配置好
□ SSH 密钥已添加到 GitLab
□ 项目已成功克隆
□ 看懂了项目的分支结构
□ 看懂了 CI/CD 配置
□ 了解了项目的 .gitignore 规则

场景二:开发第一个功能

假设 leader 让你开发"用户登录页面"。

完整流程

bash 复制代码
# ===== 1. 同步最新代码 =====
git checkout main
git pull origin main

# 如果有 develop 分支
git checkout develop
git pull origin develop

# ===== 2. 创建功能分支 =====
git checkout -b feature/user-login

# ===== 3. 开发并提交 =====
# 编写 login.html...
git add src/login.html
git commit -m "feat(auth): add login page HTML structure"

# 编写 login.js...
git add src/login.js
git commit -m "feat(auth): implement login form validation"

# 编写 login.css...
git add src/login.css
git commit -m "style(auth): add login page styles"

# ===== 4. 同步最新代码(开发期间 develop 有更新) =====
git fetch origin
git rebase origin/develop

# 如果有冲突:
# 1. 编辑冲突文件
# 2. git add <冲突文件>
# 3. git rebase --continue

# ===== 5. 推送到远程 =====
git push -u origin feature/user-login

# ===== 6. 在 GitLab 创建 Merge Request =====
# - 源分支:feature/user-login
# - 目标分支:develop
# - 标题:feat(auth): implement user login
# - 描述:实现用户登录功能,包括表单验证和 API 调用
# - 审核人:@leader
# - 关联 Issue:#123

# ===== 7. 等待 Code Review =====
# leader 会提一些修改意见

# ===== 8. 根据 Review 意见修改 =====
# 修改代码...
git add .
git commit -m "fix(auth): address code review feedback"
git push

# ===== 9. Review 通过,leader 合并 =====

# ===== 10. 清理 =====
git checkout develop
git pull origin develop
git branch -d feature/user-login
git push origin --delete feature/user-login

场景三:紧急修复线上 Bug

线上用户反馈登录页面有 Bug,需要紧急修复。

完整流程

bash 复制代码
# ===== 1. 从 main 创建 hotfix 分支 =====
git checkout main
git pull origin main
git checkout -b hotfix/fix-login-error

# ===== 2. 修复 Bug =====
# 编写修复代码...
git add src/login.js
git commit -m "fix(auth): fix login validation error"

# ===== 3. 推送并创建 MR =====
git push -u origin hotfix/fix-login-error

# 在 GitLab 创建 MR:
# - 源分支:hotfix/fix-login-error
# - 目标分支:main
# - 审核人:@leader
# - 紧急标记:urgent

# ===== 4. Review 通过后合并到 main =====

# ===== 5. 同步到 develop =====
git checkout develop
git pull origin develop
git merge --no-ff hotfix/fix-login-error

# ===== 6. 打 tag(如果需要) =====
git checkout main
git tag -a v1.0.1 -m "Hotfix: fix login error"
git push origin main --tags

# ===== 7. 清理 =====
git branch -d hotfix/fix-login-error
git push origin --delete hotfix/fix-login-error

场景四:多人协作开发

你和同事张三、李四一起开发一个模块。

协作规则

复制代码
1. 每个人都有自己的 feature 分支
2. 开发前先同步最新代码
3. 小步提交,频繁推送
4. MR 通过后及时合并
5. 合并后删除自己的分支

你的操作

bash 复制代码
# ===== 1. 同步最新代码 =====
git checkout develop
git pull origin develop

# ===== 2. 创建你的功能分支 =====
git checkout -b feature/user-profile

# ===== 3. 开发并频繁推送 =====
git add .
git commit -m "feat(user): add profile page"
git push -u origin feature/user-profile

# 继续开发...
git add .
git commit -m "feat(user): add profile edit"
git push

# ===== 4. 开发完成后,同步最新代码 =====
git fetch origin
git rebase origin/develop

# 如果有冲突(张三或李四的代码和你的冲突了):
git status  # 查看冲突文件
# 手动解决冲突...
git add .
git rebase --continue

# ===== 5. 推送并创建 MR =====
git push --force-with-lease  # rebase 后需要 force push
# 在 GitLab 创建 MR

# ===== 6. 等待 Review 并合并 =====

# ===== 7. 清理 =====
git checkout develop
git branch -d feature/user-profile
git push origin --delete feature/user-profile

查看团队进度

bash 复制代码
# 查看所有人的分支
git branch -a

# 查看谁提交了什么
git log --oneline --graph --all --decorate

# 查看某个文件的修改历史
git log --oneline -- src/login.js

# 查看某个人的提交
git log --author="zhangsan"

场景五:发版与回滚

项目要发 v2.0.0 版本。

发版流程

bash 复制代码
# ===== 1. 从 develop 创建 release 分支 =====
git checkout develop
git pull origin develop
git checkout -b release/v2.0.0

# ===== 2. 发版前的最后调整 =====
# 修改版本号...
# 修复最后的小问题...
git add .
git commit -m "chore: bump version to 2.0.0"
git commit -m "fix: fix minor issues before release"

# ===== 3. 推送 release 分支 =====
git push -u origin release/v2.0.0

# ===== 4. 在 GitLab 创建 MR(合并到 main) =====
# 审核人:@leader
# 审核通过后合并

# ===== 5. 合并到 main 并打 tag =====
git checkout main
git pull origin main
git tag -a v2.0.0 -m "Release v2.0.0"
git push origin main --tags

# ===== 6. 同步到 develop =====
git checkout develop
git merge --no-ff release/v2.0.0
git push origin develop

# ===== 7. 清理 =====
git branch -d release/v2.0.0
git push origin --delete release/v2.0.0

回滚流程(线上出问题了)

bash 复制代码
# ===== 方案一:revert(推荐) =====
git checkout main
git revert HEAD  # 或 revert 指定的 commit
git push origin main
git tag -a v2.0.1 -m "Revert v2.0.0"
git push origin --tags

# ===== 方案二:回退到上一个 tag =====
git checkout main
git reset --hard v1.0.0  # 回退到 v1.0.0
git push --force-with-lease origin main
# 注意:如果已经有人基于 v2.0.0 开发了,不要用这个方案!

场景六:处理复杂的 Git 故障

故障1:误删了重要分支

bash 复制代码
# 找到最后的 commit
git reflog

# 恢复分支
git checkout -b feature/important abc1234

# 推送到远程
git push -u origin feature/important

故障2:push 了错误代码到 main

bash 复制代码
# 方案 A:revert(安全)
git checkout main
git revert HEAD
git push origin main

# 方案 B:reset(需要 force push,危险)
git checkout main
git reset --hard HEAD~1
git push --force-with-lease origin main

故障3:rebase 冲突太多,不想继续了

bash 复制代码
# 放弃本次 rebase
git rebase --abort

# 改用 merge
git merge origin/develop

故障4:不小心把大文件提交了

bash 复制代码
# 从 Git 历史中彻底删除
git filter-repo --invert-paths --path large-file.zip

# 或者用 BFG
java -jar bfg.jar --strip-blobs-bigger-than 10M repo.git

# 强制推送
git push --force-with-lease

故障5:detached HEAD 状态

bash 复制代码
# 你 checkout 了一个 commit 而不是分支
# 解决:创建新分支
git checkout -b temp-branch

# 或者回到之前的分支
git checkout main

七、企业 Git 命令速查表

日常操作

bash 复制代码
git pull --rebase              # 拉取并 rebase
git add -p                     # 交互式暂存
git commit -m "type(scope): msg"  # 规范提交
git push -u origin <branch>    # 推送并设置上游
git stash / git stash pop      # 临时存储

分支操作

bash 复制代码
git branch                     # 查看分支
git checkout -b <branch>       # 创建并切换
git branch -d <branch>         # 删除分支
git push origin --delete <branch>  # 删除远程分支
git branch -m <old> <new>      # 重命名

查看历史

bash 复制代码
git log --oneline --graph --all  # 分支图
git log --author="name"          # 按作者
git log --since="1 week ago"     # 按时间
git log -- src/file.js           # 按文件
git diff main..feature           # 比较分支

撤销操作

bash 复制代码
git restore <file>              # 丢弃工作区修改
git restore --staged <file>     # 取消暂存
git reset HEAD~1                # 撤销最后一次 commit(保留修改)
git reset --hard HEAD~1         # 彻底回退(危险!)
git revert HEAD                 # 安全回滚
git reflog                      # 查看所有操作记录

高级操作

bash 复制代码
git rebase -i HEAD~3            # 交互式 rebase
git cherry-pick <commit>        # 移植 commit
git bisect start                # 二分查找 Bug
git worktree add <path> <branch>  # 多分支并行开发
git archive -o out.zip HEAD     # 导出代码快照

八、学习路径建议

第一周:基础操作

复制代码
Day 1-2:配置 Git,走完 01 章节
Day 3-4:练习分支操作,走完 02 章节
Day 5-7:每天在公司项目上实际操作

第二周:工作流

复制代码
Day 8-9:练习 commit 规范和 stash,走完 03 章节
Day 10-11:学习 Code Review,走完 04 章节
Day 12-14:在公司项目上创建第一个 MR

第三周:CI/CD

复制代码
Day 15-16:了解项目 CI/CD,走完 05 章节
Day 17-18:配置本地 hooks
Day 19-21:在公司项目上体验完整 CI/CD 流程

第四周:高级技巧

复制代码
Day 22-23:练习高级技巧,走完 06 章节
Day 24-25:做实战演练,走完 07 章节
Day 26-28:在公司项目上处理实际问题

九、常见面试题(Git)

复制代码
Q: git merge 和 git rebase 的区别?
A: merge 保留完整历史,会产生 merge commit;rebase 线性化历史,更干净。

Q: 什么时候用 merge,什么时候用 rebase?
A: 公共分支用 merge,个人 feature 分支用 rebase。

Q: git stash 是什么?
A: 临时存储工作区和暂存区的修改,可以恢复。

Q: git reset 和 git revert 的区别?
A: reset 改变历史(危险),revert 创建新 commit 撤销(安全)。

Q: 什么是 HEAD?
A: HEAD 是指向当前分支的指针。

Q: 什么是 detached HEAD?
A: HEAD 直接指向某个 commit 而不是分支。

Q: 如何查看某个文件的修改历史?
A: git log -- <file>

Q: 如何撤销最后一次提交?
A: git reset --soft HEAD~1(保留修改)或 git revert HEAD(已 push)

Q: 如何解决合并冲突?
A: 手动编辑冲突文件,删除冲突标记,git add,然后 git commit 或 git rebase --continue。

Q: 什么是 .gitignore?
A: 告诉 Git 哪些文件不需要跟踪的配置文件。

十、最终检查清单

完成所有章节后,检查以下技能是否都掌握了:

复制代码
□ 基础操作
  □ git clone / add / commit / push / pull
  □ git status / diff / log
  □ git checkout / switch

□ 分支管理
  □ 创建 / 切换 / 删除分支
  □ Git Flow 完整流程
  □ GitHub Flow 完整流程

□ 团队协作
  □ 创建 MR / PR
  □ Code Review
  □ 解决合并冲突

□ 高级操作
  □ git stash
  □ git rebase
  □ git cherry-pick
  □ git reflog(救命神器)
  □ git revert(安全回滚)

□ CI/CD
  □ 看懂 .gitlab-ci.yml / .github/workflows
  □ 配置 pre-commit hooks
  □ 了解代码质量工具

□ 故障排查
  □ 误删分支恢复
  □ push 错误代码回滚
  □ rebase 冲突处理
  □ detached HEAD 处理

十一、学习资源

复制代码
官方文档:https://git-scm.com/book/zh/v2
Git 实操练习:https://learngitbranching.js.org/?locale=zh_CN
Git 可视化学习:https://git-school.github.io/visualizing-git/
GitHub 官方教程:https://docs.github.com/en/get-started

恭喜你!学完这 7 个章节 + 完成所有练习,你已经在 Git 企业实战能力上达到了"跟实战一个月"的效果。

剩下的就是在公司项目中实际操作了。祝实习顺利! 🎉


上一章06-Git高级技巧与故障排查

返回目录 :<README.md>