Git 高阶速查手册
版本控制专家 | 高效协作必备
一、核心进阶概念
Git 对象模型
- Blob:文件内容快照
- Tree:目录结构与文件引用
- Commit:版本快照(含父提交指针)
- Tag:版本标记(轻量/附注)
作用:理解 Git 底层存储逻辑,避免误操作
引用类型
- HEAD:当前分支指针
- Detached HEAD:游离状态(临时切换提交)
- 符号引用:如
refs/heads/main
存储机制
.git目录结构:objects/(数据)、refs/(引用)、hooks/(钩子)- 浅克隆:
git clone --depth=1仅拉取最新提交
二、高阶命令速查
| 场景 | 命令/操作 | 用途 |
|---|---|---|
| 历史重构 | git rebase -i HEAD~3 |
合并/修改/删除最近3次提交 |
| 精准提交 | git add -p → 交互式选择代码块暂存 |
将大修改拆分为多个逻辑提交 |
| 跨分支移植 | git cherry-pick <commit> |
选择性应用特定提交到当前分支 |
| 紧急恢复 | git reflog → git reset --hard <id> |
找回误删提交或回退到任意历史状态 |
| 敏感信息清理 | git filter-repo --path secret.txt --invert-paths |
从历史中彻底删除文件 |
| 自动化操作 | .git/hooks/pre-commit 脚本 |
提交前自动执行代码检查/格式化 |
三、高效工作流
Gitflow 工作流
- 主分支:
main(稳定版)、develop(开发版) - 辅助分支:
feature/*:功能开发hotfix/*:紧急修复release/*:预发布准备
- 主分支:
GitHub Flow
- 直接在
main分支开发,通过 Pull Request 合并 - 适用:小团队快速迭代
- 直接在
多分支同步技巧
1
2
3# 将 hotfix 同步到所有分支
git checkout feature && git rebase hotfix
git checkout develop && git rebase hotfix
四、协作与冲突进阶
三方合并策略
1
git merge -s recursive -Xours <branch> # 冲突时优先保留当前分支代码
Rebase 与 Merge 对比
- Rebase:线性化历史,适合个人分支
- Merge:保留分支拓扑,适合团队协作
冲突解决进阶
- rerere 自动记忆:
git config --global rerere.enabled true - 可视化工具:
git mergetool集成 Beyond Compare 等工具
- rerere 自动记忆:
五、性能优化与安全
部分克隆
1
git clone --filter=blob:none <repo> # 仅下载元数据,后续按需加载
稀疏检出
1
git sparse-checkout set src/ # 仅检出指定目录
强制推送保护
1
git push --force-with-lease # 检查远程是否被他人更新后覆盖
六、附:Git 命令速查表
| 分类 | 常用命令 |
|---|---|
| 历史操作 | git bisect(二分法定位问题提交) |
| 子模块 | git submodule update --recursive |
| 别名 | git config --global alias.lg "log --graph" |
| 远程管理 | git remote prune origin 清理无效远程分支 |
设计原则:
- 聚焦高频场景:覆盖团队协作、历史重构、性能优化等真实开发痛点
- 命令与原理结合:如
rebase的提交历史线性化机制 - 安全警示:强制推送、历史重写等危险操作需谨慎