Git 入门教程——从零掌握版本控制

Git 入门教程——从零掌握版本控制

作者: CaoZH
日期: 2023-10-15
本文为原创教程


Git 是当今最流行的版本控制系统。无论你写什么代码——前端、后端、脚本还是文档——Git 都是必修课。本文从零开始,带你掌握日常开发中最常用的 Git 操作。

一、安装与配置

安装 Git

1
2
3
4
5
6
7
8
9
10
11
# Ubuntu/Debian
sudo apt install -y git

# CentOS
sudo yum install -y git

# macOS
brew install git

# 验证安装
git --version

首次配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 设置用户名和邮箱(提交记录会显示)
git config --global user.name "Your Name"
git config --global user.email "your@email.com"

# 设置默认分支名
git config --global init.defaultBranch main

# 设置别名(效率翻倍)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --oneline --graph --all --decorate"

# 查看配置
git config --list

二、核心概念

1
2
3
4
5
6
7
8
9
10
11
12
13
工作区(Working Directory)   暂存区(Staging Area)   本地仓库(Local Repo)
│ │ │
│ git add │ git commit │
├──────────────────────────►├───────────────────────►│
│ │ │
│◄───────────────────────────┤◄───────────────────────┤
│ git checkout │ git reset │
│ │ │
│ │
│ │ git push
│ ├───────────► 远程仓库
│◄───────────────────────┤
│ git pull │

三、基本操作

初始化仓库

1
2
3
4
5
6
7
# 方式一:创建新仓库
mkdir my-project && cd my-project
git init

# 方式二:克隆远程仓库
git clone https://github.com/user/repo.git
git clone git@github.com:user/repo.git # SSH 方式

日常三连

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 查看状态
git status

# 2. 添加文件到暂存区
git add index.html # 添加单个文件
git add src/ # 添加整个目录
git add . # 添加所有变更
git add -p # 交互式分段添加

# 3. 提交到本地仓库
git commit -m "feat: 添加用户登录功能"
git commit -a -m "fix: 修复空指针" # 跳过 git add(仅对已跟踪文件)

四、分支管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 查看分支
git branch # 本地分支列表
git branch -a # 所有分支(包括远程)
git branch -r # 远程分支

# 创建分支
git branch feature-login # 创建分支
git checkout -b feature-login # 创建并切换到新分支

# 切换分支
git checkout main
git switch main # Git 2.23+ 的新语法

# 合并分支
git checkout main
git merge feature-login # 将 feature-login 合并到 main

# 删除分支
git branch -d feature-login # 删除本地分支(已合并)
git branch -D feature-login # 强制删除(未合并)
git push origin --delete feature-login # 删除远程分支

完整的分支工作流示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1. 从 main 拉取最新代码
git checkout main
git pull origin main

# 2. 创建功能分支
git checkout -b feature/user-management

# 3. 开发并提交
git add .
git commit -m "feat: 添加用户CRUD接口"

# 4. 推送到远程
git push origin feature/user-management

# 5. 创建 PR/MR → 代码审查 → 合并到 main

# 6. 合并后更新本地 main
git checkout main
git pull origin main

# 7. 删除功能分支
git branch -d feature/user-management

五、远程仓库操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看远程仓库
git remote -v

# 添加远程仓库
git remote add origin https://github.com/user/repo.git

# 推送代码
git push origin main # 推送到 main
git push -u origin feature/login # 第一次推送并建立关联
git push --all # 推送所有分支

# 拉取代码
git pull origin main # 拉取并合并
git fetch origin # 仅获取不合并

# 查看远程仓库信息
git remote show origin

六、撤销与回退

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 工作区修改了但没 add
git checkout -- index.html # 撤销单个文件
git restore index.html # 新版语法
git restore . # 撤销所有

# 已经 add 了但没 commit
git reset HEAD index.html # 撤销暂存
git restore --staged index.html # 新版语法
git reset HEAD . # 撤销所有暂存

# 已经 commit 了但没 push
git commit --amend -m "新消息" # 修改最近一次提交信息
git reset --soft HEAD~1 # 撤销 commit,保留修改
git reset --hard HEAD~1 # 彻底回退(⚠️ 慎用)

# 已经 push 了
git revert HEAD # 创建一个新的反向提交
git revert HEAD~3..HEAD # 回退最近3个提交

七、解决冲突

当合并分支时,如果两个人改了同一文件的同一区域,就会产生冲突。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 合并时产生冲突
git merge feature/login
# 输出:CONFLICT in src/app.js

# 查看冲突文件
git status

# 手动编辑冲突文件
# <<<<<<< HEAD
# 当前分支的内容
# =======
# 合并过来的内容
# >>>>>>> feature/login

# 解决后标记已解决
git add src/app.js
git commit -m "fix: 解决登录功能冲突"

八、查看历史

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看提交历史
git log
git log --oneline # 一行显示
git log --graph # 图形化显示
git log --oneline --graph --all # 最常用组合

# 查看某个文件的修改历史
git log -p index.html
git blame index.html # 每行最后谁改的

# 搜索提交
git log --grep="fix" # 按提交信息搜索
git log --author="CaoZH" # 按作者搜索
git log --since="2023-01-01" # 按时间搜索

九、.gitignore

忽略不需要跟踪的文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# .gitignore

# 依赖
node_modules/
vendor/
venv/

# 构建产物
dist/
build/
target/
*.jar

# 环境配置
.env
.env.local

# IDE
.idea/
.vscode/
*.swp

# 系统文件
.DS_Store
Thumbs.db

# 日志
*.log
logs/

十、总结

Git 其实不需要背命令,掌握这 15 个操作就能覆盖 90% 的日常需求:

场景 命令
克隆仓库 git clone
查看状态 git status
添加到暂存 git add
提交 git commit -m "..."
推送 git push
拉取 git pull
创建分支 git checkout -b
合并 git merge
查看历史 git log --oneline --graph
撤销修改 git restore
回退提交 git reset
解决冲突 手动编辑 → git addgit commit
暂存修改 git stash
还原暂存 git stash pop
对比差异 git diff

首发于 CaoZH 的笔记