完整实战场景演练
本章目标:通过 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>