版本控制系统(Version Control System)是现代软件开发不可或缺的工具。想象一下你正在写一篇重要论文,每次修改都保存一个新版本,很快文件夹里就会出现"论文_v1.docx"、"论文_最终版.docx"、"论文_真的最终版.docx"这样的混乱局面。Git 就是为解决这类问题而生的智能版本管理工具,它能:
与传统的文件备份方式相比,Git 采用差异存储技术,只保存文件变化的部分,这使得它非常高效。一个中等规模的项目,即使有上万次提交,其.git目录通常也不会超过几百MB。
对于 Ubuntu/Debian 系统:
bash复制sudo apt update
sudo apt install git -y
对于 CentOS/RHEL 系统:
bash复制sudo yum install git -y
安装后验证版本:
bash复制git --version
# 应输出类似:git version 2.43.0
cmd复制git --version
专业建议:Windows 用户建议同时安装 Git Bash,它提供了类 Linux 的终端环境,使用体验更佳。
安装后首要任务是配置用户身份,这对后续的版本追踪至关重要:
bash复制git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
查看完整配置:
bash复制git config --list
常用配置项说明:
core.editor:设置默认文本编辑器(如 vim、nano)color.ui:启用彩色输出alias:创建命令别名(如 git st 代替 git status)Git 采用独特的三棵树架构:
工作区(Working Directory):
肉眼可见的项目目录,你直接编辑文件的地方。这里的修改尚未被 Git 跟踪。
暂存区(Staging Area):
使用 git add 后,文件变化会被存入这个中间区域。它像是一个准备区,允许你精心挑选要提交的修改。
版本库(Repository):
执行 git commit 后,暂存区的内容会永久存入版本库。每个提交都有一个唯一的 SHA-1 哈希值标识。
技术细节:
.git目录结构解析
objects/:存储所有数据内容(Blob 对象)refs/:存储指向各个分支的指针HEAD:指向当前所在分支config:项目特有的配置设置
bash复制# 初始化新仓库
mkdir project && cd project
git init
# 创建并编辑文件
echo "Hello World" > README.md
# 添加到暂存区
git add README.md
# 提交到版本库
git commit -m "Initial commit"
# 查看提交历史
git log --oneline
Git 的分支本质上只是指向某个提交的可变指针。创建新分支时,Git 只是新建了一个指针,并没有复制任何文件,因此非常轻量。
bash复制# 创建并切换到新分支
git checkout -b feature/login
# 等效于以下两条命令:
git branch feature/login # 创建分支
git checkout feature/login # 切换分支
当目标分支是当前分支的直接上游时,Git 会简单地移动指针:
bash复制git checkout main
git merge feature/login # 快速前进合并
当分支出现分叉时,Git 会创建新的合并提交:
bash复制git merge --no-ff feature/login # 强制创建合并提交
合并冲突解决流程:
git add 标记已解决mermaid复制graph LR
main[main] --> release[release]
develop[develop] --> feature[feature/*]
develop --> release
release --> main
main --> hotfix[hotfix/*]
main 创建功能分支bash复制# 添加远程仓库
git remote add origin https://gitee.com/yourname/repo.git
# 查看远程连接
git remote -v
# 推送分支
git push -u origin main # -u 设置上游跟踪分支
# 拉取更新
git pull origin main
分支命名约定:
feature/:新功能开发bugfix/:缺陷修复release/:版本发布hotfix/:紧急修复提交信息规范:
code复制type(scope): subject
body
footer
常见 type:feat、fix、docs、style、refactor、test、chore
Code Review 流程:
git diff 查看变更bash复制# 修改最近一次提交
git commit --amend
# 交互式变基(修改最近3次提交)
git rebase -i HEAD~3
# 强制推送(慎用!)
git push --force-with-lease
bash复制# 查看所有操作记录
git reflog
# 重置到指定提交
git reset --hard abc1234
bash复制# 添加子模块
git submodule add https://github.com/user/repo.git libs/repo
# 克隆包含子模块的项目
git clone --recurse-submodules https://github.com/user/main-project.git
yaml复制# 示例 GitHub Actions 配置
name: CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm install
- run: npm test
bash复制# 安装 Git LFS
git lfs install
# 跟踪大文件类型
git lfs track "*.psd"
# 查看跟踪模式
git lfs ls-files
.gitignore 排除敏感文件git secret 加密敏感数据bash复制# 定期垃圾回收
git gc --auto
# 清理历史大文件
git filter-branch --tree-filter 'rm -f large_file.zip' HEAD
bash复制# 仅克隆最近历史
git clone --depth=1 https://github.com/user/repo.git
# 获取完整历史
git fetch --unshallow
命令行工具:
tig:交互式 Git 浏览器lazygit:终端 UI 工具图形界面:
IDE 集成:
bash复制# 使用编辑器解决冲突后
git add resolved_file.txt
git commit # 不要带 -m 参数,使用自动生成的合并信息
bash复制# 撤销工作区修改
git checkout -- file.txt
# 撤销暂存区修改
git reset HEAD file.txt
# 回退到指定提交
git reset --hard abc1234
bash复制# 查找删除的分支最后提交
git reflog | grep 'branch-name'
# 重建分支
git branch branch-name abc1234
官方文档:
交互式学习:
进阶书籍:
记住,Git 的精髓在于理解其底层的数据模型。每个提交都是一个包含文件快照、作者信息、时间戳和父提交指针的数据对象。掌握了这个核心理念,所有高级命令都会变得直观易懂。