第一章:Git 概述
1.1 什么是 Git?
Git 是目前世界上最流行的分布式版本控制系统(Distributed Version Control System, DVCS)。它最初由 Linux 之父 Linus Torvalds 在 2005 年开发,用于管理 Linux 内核代码。
它的核心目标是:
-
高效处理大规模代码库
-
分布式管理,任何开发者都可以拥有完整仓库副本
-
快速分支与合并
-
完整的历史记录追踪
1.2 Git 与传统版本控制系统的区别
在 Git 出现之前,常见的版本控制工具有 CVS、SVN(集中式版本控制系统)。
区别主要体现在 架构和管理方式:
特点 | SVN(集中式) | Git(分布式) |
---|---|---|
仓库结构 | 只有一台中央服务器 | 每个开发者本地都有完整仓库副本 |
网络依赖 | 必须联网操作 | 大部分操作可离线进行 |
分支性能 | 分支开销大,合并复杂 | 分支轻量,合并高效 |
数据安全 | 中央服务器单点故障风险大 | 多副本,安全性高 |
速度 | 提交/历史查询较慢 | 基于快照+哈希索引,操作极快 |
1.3 Git 的核心思想
-
快照存储:Git 并不是存储文件差异(如 SVN 的 diff 模式),而是存储文件的完整快照。若文件未修改,则指向之前的快照。
-
SHA-1 哈希校验:每个提交、文件内容、树对象都有唯一的哈希值,保证完整性和不可篡改。
-
三大区域模型:
-
工作区(Working Directory):你看到的实际项目文件
-
暂存区(Staging Area):准备提交的快照
-
仓库区(Repository):真正持久化的历史版本
-
第二章:Git 的安装与配置
2.1 安装
-
Windows:下载 Git for Windows
-
Linux:
sudo apt install git # Debian/Ubuntu sudo yum install git # CentOS
-
Mac:
brew install git
2.2 基本配置
# 设置用户名和邮箱(全局)
git config --global user.name "bing"
git config --global user.email "bing@example.com"
# 查看所有配置
git config --list
# 设置默认分支为 main(新版本 Git 默认已改为 main)
git config --global init.defaultBranch main
第三章:Git 基本操作
3.1 创建与初始化仓库
# 新建仓库
git init
# 克隆远程仓库
git clone git@github.com:user/project.git
3.2 添加与提交
# 查看文件状态
git status
# 添加到暂存区
git add file.txt
git add . # 添加所有修改
# 提交
git commit -m "feat: add new feature"
3.3 查看历史
git log # 完整日志
git log --oneline # 简洁日志
git log --graph --oneline --decorate # 图形化显示分支
3.4 撤销与回退
git checkout -- file.txt # 撤销未暂存修改
git reset HEAD file.txt # 取消暂存
git commit --amend # 修改最近一次提交
git revert <commit-id> # 生成新提交,撤销历史版本
git reset --hard <commit-id> # 强制回退(危险操作)
第四章:分支管理
4.1 创建与切换
git branch dev # 新建分支
git checkout dev # 切换分支
git checkout -b feature # 新建并切换
4.2 合并与删除
git checkout main
git merge dev # 普通合并
git merge --no-ff dev # 保留合并记录
git branch -d dev # 删除分支
git branch -D dev # 强制删除
4.3 Rebase
git checkout feature
git rebase main # 将 feature 分支的提交放到 main 后
第五章:远程仓库操作
5.1 常用命令
git remote -v # 查看远程地址
git remote add origin <url> # 关联远程仓库
git push -u origin main # 推送代码并绑定分支
git pull origin main # 拉取远程更新
git fetch origin # 获取远程信息但不合并
5.2 SSH 与 HTTPS
-
HTTPS:需要账号密码/Token
-
SSH:配置公钥即可免密登录,常用于 GitHub、GitLab
第六章:Git 高级操作
6.1 Stash(保存现场)
git stash save "WIP: 未完成工作"
git stash list
git stash pop # 恢复并删除
git stash apply # 恢复但保留
6.2 Tag(标签)
git tag v1.0.0
git push origin v1.0.0
git tag -a v1.1.0 -m "版本说明"
6.3 Cherry-pick(挑选提交)
git cherry-pick <commit-id>
6.4 Submodule(子模块)
git submodule add https://github.com/user/lib.git
git submodule update --init --recursive
第七章:Git 底层原理
7.1 Git 的对象
-
Blob:存储文件内容
-
Tree:目录结构
-
Commit:一次提交
-
Tag:版本标签
7.2 哈希与不可变性
每个对象通过 SHA-1 哈希生成唯一 ID,例如:
git hash-object file.txt
7.3 分支与 HEAD
-
分支:只是指向提交的指针
-
HEAD:当前所在分支的游标
第八章:团队协作与工作流
8.1 常见工作流
-
集中式工作流:所有人提交到 main
-
功能分支工作流:每个功能单独分支,开发完成再合并
-
Git Flow:经典模式(main/dev/release/hotfix)
-
Trunk Based Development:主干开发,持续集成
8.2 代码评审(Pull Request / Merge Request)
-
在 GitHub/GitLab 上发起 PR/MR
-
进行代码审核,确保质量
第九章:Git 使用技巧与最佳实践
-
提交粒度要小,信息要清晰
-
好例子:
fix: 修复用户登录失败时的错误提示
-
坏例子:
update code
-
-
使用
.gitignore
忽略不必要的文件 -
善用
rebase
保持提交历史整洁 -
合并分支时根据需求选择
merge
还是rebase
-
定期清理无用分支
第十章:Git 常见问题与解决方案
-
拉取报错
conflict
→ 手动解决冲突再提交 -
误删代码 → 使用
git reflog
找回 -
提交了敏感信息 → 使用
git filter-repo
或BFG
工具清理历史
总结
Git 不仅是一个工具,更是一种版本管理的思想。
-
基础:学会
add
、commit
、branch
、merge
-
提高:掌握
rebase
、stash
、cherry-pick
-
进阶:理解 Git 对象模型、SHA-1 哈希、分布式原理
-
实践:结合工作流(Git Flow、主干开发)提升团队协作效率