当前位置: 首页 > news >正文

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

完整实战场景演练

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


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

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

步骤

# ===== 1. 配置 Git(如果还没配) =====gitconfig--globaluser.name"zhangsan"gitconfig--globaluser.email"zhangsan@chinaunicom.cn"gitconfig--globalcore.autocrlftruegitconfig--globalpull.rebasetruegitconfig--globalpush.default currentgitconfig--globalinit.defaultBranch main# ===== 2. 生成 SSH 密钥 =====ssh-keygen-ted25519-C"zhangsan@chinaunicom.cn"# 一路回车cat~/.ssh/id_ed25519.pub# 复制公钥,添加到公司 GitLab# ===== 3. 测试 SSH 连接 =====ssh-Tgit@gitlab.your-company.com# ===== 4. 克隆项目 =====gitclone git@gitlab.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-m"feat(auth): add login page HTML structure"# 编写 login.js...gitaddsrc/login.jsgitcommit-m"feat(auth): implement login form validation"# 编写 login.css...gitaddsrc/login.cssgitcommit-m"style(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-m"fix(auth): address code review feedback"gitpush# ===== 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-m"fix(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-m"Hotfix: fix login error"gitpush 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-m"feat(user): add profile page"gitpush-uorigin feature/user-profile# 继续开发...gitadd.gitcommit-m"feat(user): add profile edit"gitpush# ===== 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--author="zhangsan"

场景五:发版与回滚

项目要发 v2.0.0 版本。

发版流程

# ===== 1. 从 develop 创建 release 分支 =====gitcheckout developgitpull origin developgitcheckout-brelease/v2.0.0# ===== 2. 发版前的最后调整 =====# 修改版本号...# 修复最后的小问题...gitadd.gitcommit-m"chore: bump version to 2.0.0"gitcommit-m"fix: 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-m"Release v2.0.0"gitpush 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-m"Revert v2.0.0"gitpush 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

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

# 方案 A:revert(安全)gitcheckout maingitrevert HEADgitpush origin main# 方案 B:reset(需要 force push,危险)gitcheckout maingitreset--hardHEAD~1gitpush --force-with-lease origin main

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

# 放弃本次 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

故障5:detached HEAD 状态

# 你 checkout 了一个 commit 而不是分支# 解决:创建新分支gitcheckout-btemp-branch# 或者回到之前的分支gitcheckout main

七、企业 Git 命令速查表

日常操作

gitpull--rebase# 拉取并 rebasegitadd-p# 交互式暂存gitcommit-m"type(scope): msg"# 规范提交gitpush-uorigin<branch># 推送并设置上游gitstash /gitstash pop# 临时存储

分支操作

gitbranch# 查看分支gitcheckout-b<branch># 创建并切换gitbranch-d<branch># 删除分支gitpush origin--delete<branch># 删除远程分支gitbranch-m<old><new># 重命名

查看历史

gitlog--oneline--graph--all# 分支图gitlog--author="name"# 按作者gitlog--since="1 week ago"# 按时间gitlog -- src/file.js# 按文件gitdiffmain..feature# 比较分支

撤销操作

gitrestore<file># 丢弃工作区修改gitrestore--staged<file># 取消暂存gitreset HEAD~1# 撤销最后一次 commit(保留修改)gitreset--hardHEAD~1# 彻底回退(危险!)gitrevert HEAD# 安全回滚gitreflog# 查看所有操作记录

高级操作

gitrebase-iHEAD~3# 交互式 rebasegitcherry-pick<commit># 移植 commitgitbisect start# 二分查找 Buggitworktreeadd<path><branch># 多分支并行开发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/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

http://www.jsqmd.com/news/1094396/

相关文章:

  • 接入 GPT-5.5 后,我的 API 调用量反而下降了,为什么?
  • 蓝桥杯软件测试Web自动化备考指南:Selenium核心API与实战案例解析
  • NLWeb:轻量级前端自然语言交互协议解析
  • 全域感知,精准干预——气象调控与多链路设备的融合创新应用
  • 智慧工地边缘 AI 视觉识别方案:从摄像头到业务闭环
  • 中兴ZXR10-3928A端口镜像实战:从零配置到流量捕获
  • 2026国内数字孪生头部企业TOP5:从长期运营能力看行业第一梯队
  • ChatGPT Plus退订后数据去哪了?:深度解析OpenAI账户注销逻辑、API访问残留、聊天记录自动清除时效(附官方未公开的GDPR合规操作清单)
  • 静态住宅IP vs TikTok专线:两种直播网络方案的深度对比与选择指南
  • 2026年选展厅设计公司:5大核心标准及推荐的展厅设计公司
  • 从零开始,用Blender制作藤蔓叶子(曲线修改器入门)
  • Appium自动化测试中pytest-repeat插件的集成与应用实践
  • 使用MMC控制台修复.NET应用证书信任链的3个关键细节
  • MFC 主程序显示 模态对话框
  • Untrunc视频修复工具终极指南:三步拯救损坏的MP4视频文件
  • Anthropic零感层:大模型服务栈的协议级坍缩与上下文治理革命
  • WPF LiveCharts 实时数据流卡顿?五大优化策略解锁流畅绘图
  • 基于图像验证的反钓鱼技术:从视觉特征到工程实践
  • 企业官网做 GEO 时,Schema JSON-LD 应该怎么配合?
  • 计算机毕业设计之基于SSM框架的连锁酒店经销商订货系统的设计与实现
  • 新衣洗几次就变旧
  • ChatGPT Plus开通即亏?资深AI工程师用Python自动化监控+日志分析,揭露你被忽略的3个使用临界点
  • AI 多功能石英钟智能功率 MOSFET 完整选型方案
  • N_m3u8DL-RE架构解析与企业级流媒体下载实战指南
  • 计算机毕业设计之基于SSM框架的高校运动会管理系统的设计与实现
  • 如何在5分钟内将任何单张图片转换为专业PSD分层文件:Layerdivider智能图像分层技术解析
  • GEE实战:从CHIRPS数据集中批量下载多时间尺度降水数据
  • MicroPython BLE HID库:零基础打造终极蓝牙控制设备的完整指南
  • Twitch视频下载终极指南:轻松保存你喜爱的直播内容
  • 国产工业 DC-DC 模块电源硬件选型技术解析:URB1215ZP-10WR3 与钡特电源 VB10-12S15P 厂家口碑推荐,10W 隔离电源参数对照