前言:为什么 Git 是程序员的“后悔药”和“时光机”?
想象一下这些场景:
熬夜写了一周的代码,改完之后发现程序跑不起来了,但你已经不记得改了哪里
团队里三个人同时修改同一个文件,一个人的改动覆盖了另一个人的
线上出了紧急 Bug,需要马上回滚到昨天稳定版本
想尝试一个新功能,又怕把现有代码搞坏
没有版本控制的开发,就像没有安全网的杂技表演。而 Git,就是给你兜底的那张网。
Git 是目前世界上最流行的分布式版本控制系统,由 Linux 之父 Linus Torvalds 在 2005 年用两周时间开发出来。如今,全球超过 90% 的软件开发团队使用 Git 管理代码。
本文将从零开始,带你系统掌握 Git 的核心概念、常用命令、分支策略和团队协作最佳实践。每一部分都有详细的原理说明和代码示例,让你不仅会敲命令,更理解背后的工作原理。
一、Git 的核心概念:理解才能用好
1.1 Git 与其他版本控制系统的区别
核心理解:Git 把每个开发者的电脑都变成一个完整的“服务器”,你可以在飞机上提交代码、创建分支、查看历史——所有操作都在本地完成。
1.2 Git 的三大区域
Git 管理文件经过三个区域,这是理解 Git 工作流的关键:
工作目录(Working Directory) → 暂存区(Staging Area) → 本地仓库(Repository)
↓ ↓ ↓
实际文件 git add 后的文件 git commit 后
(可修改) (准备提交的快照) (永久保存)
用日常场景理解:
工作目录:你的办公桌,堆满各种文件和草稿
暂存区:你的文件篮,挑选要归档的文件放进去
本地仓库:你的文件柜,把文件篮里的文件正式归档保存
1.3 Git 文件的三种状态
1.4 Git 的核心数据结构
理解 Git 的底层数据结构,能帮你更好地理解命令的行为。
# Git 本质上是一个键值对数据库
# 每个提交(commit)都有一个唯一的 40 位 SHA-1 哈希值
$ git log --oneline
# a1b2c3d (HEAD -> main) 修复登录Bug
# e4f5g6h 添加用户注册功能
# i7j8k9l 初始化项目
Git 的对象模型:
Blob:文件内容的快照
Tree:目录结构,包含文件名和对应的 Blob
Commit:一次提交,包含 Tree、父提交、作者信息、时间戳、提交说明
Commit (a1b2c3d)
├── Tree (指向目录结构)
│ ├── blob (src/index.js 的内容)
│ ├── blob (src/utils.js 的内容)
│ └── tree (src/components)
│ └── blob (Button.js)
├── Parent commit (e4f5g6h)
├── Author: 张三 <zhangsan@example.com>
├── Date: 2024-01-15 10:30:00
└── Message: 修复登录Bug
二、Git 环境搭建与基础配置
2.1 安装 Git
# macOS
brew install git
# Ubuntu/Debian
sudo apt-get install git
# Windows
# 下载安装包: https://git-scm.com/download/win
# 或使用 winget
winget install --id Git.Git -e --source winget
# 验证安装
git --version
# git version 2.40.0
2.2 首次配置(必须做)
# 设置用户名和邮箱(每次提交都会记录)
git config --global user.name "你的名字"
git config --global user.email "your.email@example.com"
# 设置默认编辑器(推荐 VS Code)
git config --global core.editor "code --wait"
# 设置默认分支名(从 master 改为 main)
git config --global init.defaultBranch main
# 查看所有配置
git config --list
# 设置别名(提高效率)
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"
2.3 配置级别
# 优先级:项目级 > 用户级 > 系统级
# 查看各级别配置
git config --system --list
git config --global --list
git config --local --list