git进阶08_完整实战场景演练
完整实战场景演练本章目标通过 6 个完整的实战场景把前面所有知识串起来达到跟实战了一个月的效果。场景一入职第一天 — 项目初始化假设你在联通产业互联网公司刚入职leader 给你分配了一个新项目。步骤# 1. 配置 Git如果还没配 gitconfig--globaluser.namezhangsangitconfig--globaluser.emailzhangsanchinaunicom.cngitconfig--globalcore.autocrlftruegitconfig--globalpull.rebasetruegitconfig--globalpush.default currentgitconfig--globalinit.defaultBranch main# 2. 生成 SSH 密钥 ssh-keygen-ted25519-Czhangsanchinaunicom.cn# 一路回车cat~/.ssh/id_ed25519.pub# 复制公钥添加到公司 GitLab# 3. 测试 SSH 连接 ssh-Tgitgitlab.your-company.com# 4. 克隆项目 gitclone gitgitlab.your-company.com:team/project-name.gitcdproject-name# 5. 查看项目结构 gitlog--oneline--graph--all--decorategitbranch-acat.gitignorecatREADME.mdcat.gitlab-ci.yml# 或 Jenkinsfile# 6. 阅读 CI/CD 配置 # 了解项目的 CI/CD 流程cat.gitlab-ci.yml# 了解有哪些阶段每个阶段做什么检查清单□ Git 已配置好 □ SSH 密钥已添加到 GitLab □ 项目已成功克隆 □ 看懂了项目的分支结构 □ 看懂了 CI/CD 配置 □ 了解了项目的 .gitignore 规则场景二开发第一个功能假设 leader 让你开发用户登录页面。完整流程# 1. 同步最新代码 gitcheckout maingitpull origin main# 如果有 develop 分支gitcheckout developgitpull origin develop# 2. 创建功能分支 gitcheckout-bfeature/user-login# 3. 开发并提交 # 编写 login.html...gitaddsrc/login.htmlgitcommit-mfeat(auth): add login page HTML structure# 编写 login.js...gitaddsrc/login.jsgitcommit-mfeat(auth): implement login form validation# 编写 login.css...gitaddsrc/login.cssgitcommit-mstyle(auth): add login page styles# 4. 同步最新代码开发期间 develop 有更新 gitfetch origingitrebase origin/develop# 如果有冲突# 1. 编辑冲突文件# 2. git add 冲突文件# 3. git rebase --continue# 5. 推送到远程 gitpush-uorigin 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 意见修改 # 修改代码...gitadd.gitcommit-mfix(auth): address code review feedbackgitpush# 9. Review 通过leader 合并 # 10. 清理 gitcheckout developgitpull origin developgitbranch-dfeature/user-logingitpush origin--deletefeature/user-login场景三紧急修复线上 Bug线上用户反馈登录页面有 Bug需要紧急修复。完整流程# 1. 从 main 创建 hotfix 分支 gitcheckout maingitpull origin maingitcheckout-bhotfix/fix-login-error# 2. 修复 Bug # 编写修复代码...gitaddsrc/login.jsgitcommit-mfix(auth): fix login validation error# 3. 推送并创建 MR gitpush-uorigin hotfix/fix-login-error# 在 GitLab 创建 MR# - 源分支hotfix/fix-login-error# - 目标分支main# - 审核人leader# - 紧急标记urgent# 4. Review 通过后合并到 main # 5. 同步到 develop gitcheckout developgitpull origin developgitmerge --no-ff hotfix/fix-login-error# 6. 打 tag如果需要 gitcheckout maingittag-av1.0.1-mHotfix: fix login errorgitpush origin main--tags# 7. 清理 gitbranch-dhotfix/fix-login-errorgitpush origin--deletehotfix/fix-login-error场景四多人协作开发你和同事张三、李四一起开发一个模块。协作规则1. 每个人都有自己的 feature 分支 2. 开发前先同步最新代码 3. 小步提交频繁推送 4. MR 通过后及时合并 5. 合并后删除自己的分支你的操作# 1. 同步最新代码 gitcheckout developgitpull origin develop# 2. 创建你的功能分支 gitcheckout-bfeature/user-profile# 3. 开发并频繁推送 gitadd.gitcommit-mfeat(user): add profile pagegitpush-uorigin feature/user-profile# 继续开发...gitadd.gitcommit-mfeat(user): add profile editgitpush# 4. 开发完成后同步最新代码 gitfetch origingitrebase origin/develop# 如果有冲突张三或李四的代码和你的冲突了gitstatus# 查看冲突文件# 手动解决冲突...gitadd.gitrebase--continue# 5. 推送并创建 MR gitpush --force-with-lease# rebase 后需要 force push# 在 GitLab 创建 MR# 6. 等待 Review 并合并 # 7. 清理 gitcheckout developgitbranch-dfeature/user-profilegitpush origin--deletefeature/user-profile查看团队进度# 查看所有人的分支gitbranch-a# 查看谁提交了什么gitlog--oneline--graph--all--decorate# 查看某个文件的修改历史gitlog--oneline-- src/login.js# 查看某个人的提交gitlog--authorzhangsan场景五发版与回滚项目要发 v2.0.0 版本。发版流程# 1. 从 develop 创建 release 分支 gitcheckout developgitpull origin developgitcheckout-brelease/v2.0.0# 2. 发版前的最后调整 # 修改版本号...# 修复最后的小问题...gitadd.gitcommit-mchore: bump version to 2.0.0gitcommit-mfix: fix minor issues before release# 3. 推送 release 分支 gitpush-uorigin release/v2.0.0# 4. 在 GitLab 创建 MR合并到 main # 审核人leader# 审核通过后合并# 5. 合并到 main 并打 tag gitcheckout maingitpull origin maingittag-av2.0.0-mRelease v2.0.0gitpush origin main--tags# 6. 同步到 develop gitcheckout developgitmerge --no-ff release/v2.0.0gitpush origin develop# 7. 清理 gitbranch-drelease/v2.0.0gitpush origin--deleterelease/v2.0.0回滚流程线上出问题了# 方案一revert推荐 gitcheckout maingitrevert HEAD# 或 revert 指定的 commitgitpush origin maingittag-av2.0.1-mRevert v2.0.0gitpush origin--tags# 方案二回退到上一个 tag gitcheckout maingitreset--hardv1.0.0# 回退到 v1.0.0gitpush --force-with-lease origin main# 注意如果已经有人基于 v2.0.0 开发了不要用这个方案场景六处理复杂的 Git 故障故障1误删了重要分支# 找到最后的 commitgitreflog# 恢复分支gitcheckout-bfeature/important abc1234# 推送到远程gitpush-uorigin feature/important故障2push 了错误代码到 main# 方案 Arevert安全gitcheckout maingitrevert HEADgitpush origin main# 方案 Breset需要 force push危险gitcheckout maingitreset--hardHEAD~1gitpush --force-with-lease origin main故障3rebase 冲突太多不想继续了# 放弃本次 rebasegitrebase--abort# 改用 mergegitmerge origin/develop故障4不小心把大文件提交了# 从 Git 历史中彻底删除gitfilter-repo --invert-paths--pathlarge-file.zip# 或者用 BFGjava-jarbfg.jar --strip-blobs-bigger-than 10M repo.git# 强制推送gitpush --force-with-lease故障5detached HEAD 状态# 你 checkout 了一个 commit 而不是分支# 解决创建新分支gitcheckout-btemp-branch# 或者回到之前的分支gitcheckout main七、企业 Git 命令速查表日常操作gitpull--rebase# 拉取并 rebasegitadd-p# 交互式暂存gitcommit-mtype(scope): msg# 规范提交gitpush-uoriginbranch# 推送并设置上游gitstash /gitstash pop# 临时存储分支操作gitbranch# 查看分支gitcheckout-bbranch# 创建并切换gitbranch-dbranch# 删除分支gitpush origin--deletebranch# 删除远程分支gitbranch-moldnew# 重命名查看历史gitlog--oneline--graph--all# 分支图gitlog--authorname# 按作者gitlog--since1 week ago# 按时间gitlog -- src/file.js# 按文件gitdiffmain..feature# 比较分支撤销操作gitrestorefile# 丢弃工作区修改gitrestore--stagedfile# 取消暂存gitreset HEAD~1# 撤销最后一次 commit保留修改gitreset--hardHEAD~1# 彻底回退危险gitrevert HEAD# 安全回滚gitreflog# 查看所有操作记录高级操作gitrebase-iHEAD~3# 交互式 rebasegitcherry-pickcommit# 移植 commitgitbisect start# 二分查找 Buggitworktreeaddpathbranch# 多分支并行开发gitarchive-oout.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/CDDay 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在公司项目上处理实际问题九、常见面试题GitQ: git merge 和 git rebase 的区别 A: merge 保留完整历史会产生 merge commitrebase 线性化历史更干净。 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/?localezh_CN Git 可视化学习https://git-school.github.io/visualizing-git/ GitHub 官方教程https://docs.github.com/en/get-started恭喜你学完这 7 个章节 完成所有练习你已经在 Git 企业实战能力上达到了跟实战一个月的效果。剩下的就是在公司项目中实际操作了。祝实习顺利上一章06-Git高级技巧与故障排查返回目录README.md