Git 本地版本控制完全教程

本教程基于你下载的项目 git_tutorial_project,手把手教你使用 Git 进行本地版本控制。项目链接 🔗


目录

  1. Git 安装与配置
  2. 初始化仓库
  3. 基本工作流程
  4. 查看状态与历史
  5. 代码回退(核心)
  6. 分支管理
  7. 标签与里程碑
  8. 撤销与清理
  9. 常用命令速查表

1. Git 安装与配置

1.1 安装 Git

Ubuntu/Debian:

1
2
sudo apt update
sudo apt install git

macOS:

1
brew install git

Windows:
下载安装包:https://git-scm.com/download/win

1.2 配置用户信息(必须)

1
2
3
4
5
6
# 设置全局用户名和邮箱(会记录在每次提交中)
git config --global user.name "你的名字"
git config --global user.email "your@email.com"

# 验证配置
git config --list

1.3 配置默认编辑器(可选)

1
2
3
4
5
# 使用 VS Code 作为默认编辑器
git config --global core.editor "code --wait"

# 或使用 nano
git config --global core.editor "nano"

2. 初始化仓库

进入项目目录,初始化 Git 仓库:

1
2
3
4
5
6
7
8
# 进入项目目录
cd git_tutorial_project

# 初始化仓库(会创建 .git 隐藏目录)
git init

# 查看 .git 目录(Linux/macOS)
ls -la .git

提示.git 目录就是 Git 的数据库,不要手动修改或删除它


3. 基本工作流程

Git 有三个核心区域:

  • 工作区(Working Directory):你实际编辑的文件
  • 暂存区(Staging Area/Index):准备提交的更改
  • 本地仓库(Repository):提交后的历史记录

3.1 添加文件到暂存区

1
2
3
4
5
6
7
8
9
10
11
# 添加单个文件
git add README.md

# 添加当前目录所有更改
git add .

# 添加特定类型的文件
git add *.py

# 交互式添加(逐个确认)
git add -p

3.2 提交更改到本地仓库

1
2
3
4
5
6
7
8
# 基本提交
git commit -m "提交说明"

# 添加并提交(仅对已跟踪文件)
git commit -am "修改说明"

# 详细提交信息(会打开编辑器)
git commit

提交信息规范:

  • feat: 新功能
  • fix: 修复 bug
  • docs: 文档更新
  • style: 代码格式调整
  • refactor: 重构
  • test: 测试相关

3.3 实操练习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 初始化仓库
git init

# 2. 添加所有文件到暂存区
git add .

# 3. 提交初始版本
git commit -m "feat: 项目初始化,添加基础结构"

# 4. 修改 src/main.py(比如修改打印内容)
# 用编辑器打开 src/main.py,修改某行代码

# 5. 查看修改了哪些文件
git status

# 6. 查看具体修改内容
git diff

# 7. 添加到暂存区
git add src/main.py

# 8. 提交修改
git commit -m "fix: 更新主程序输出内容"

4. 查看状态与历史

4.1 查看当前状态

1
2
3
4
5
# 查看哪些文件被修改、哪些在暂存区
git status

# 简洁模式
git status -s

4.2 查看修改内容

1
2
3
4
5
6
7
8
# 查看工作区与暂存区的差异
git diff

# 查看暂存区与最新提交的差异
git diff --staged

# 查看某个文件的修改历史
git diff HEAD -- src/main.py

4.3 查看提交历史

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 基本日志
git log

# 简洁一行显示
git log --oneline

# 图形化显示分支
git log --oneline --graph --all

# 查看最近 5 条
git log -5

# 查看某个文件的修改历史
git log --follow src/main.py

# 查看每次提交的详细改动
git log -p

4.4 查看某个提交详情

1
2
3
4
5
6
7
8
# 查看最新提交
git show

# 查看指定提交(使用 commit ID 前几位)
git show abc1234

# 查看某次提交中某个文件的内容
git show abc1234:src/main.py

5. 代码回退(核心)

这是最重要的部分,掌握这些命令可以救你于水火。

5.1 回退到指定版本(保留修改)

1
2
3
4
5
6
# 软回退:回退到某个提交,但保留工作区和暂存区的修改
git reset --soft HEAD~1

# 解释:HEAD~1 表示上一个提交
# --soft 只移动 HEAD 指针,不改工作区文件
# 适用场景:提交信息写错了,想重新提交

5.2 回退到指定版本(丢弃暂存区)

1
2
3
4
5
6
# 混合回退(默认):回退到某个提交,保留工作区修改,清空暂存区
git reset --mixed HEAD~1
# 或简写
git reset HEAD~1

# 适用场景:提交了不该提交的文件,想重新选择添加哪些文件

5.3 回退到指定版本(完全丢弃修改)⚠️

1
2
3
4
5
# 硬回退:彻底回退到某个提交,丢弃所有修改(危险!)
git reset --hard HEAD~1

# 适用场景:彻底放弃最近的修改,回到某个干净状态
# ⚠️ 警告:此操作会丢失工作区和暂存区的所有修改,不可恢复!

5.4 回退到指定 commit ID

1
2
3
4
5
6
7
8
9
10
11
12
13
# 先查看历史,找到 commit ID
git log --oneline

# 输出示例:
# a1b2c3d (HEAD -> main) 修复 bug
# e4f5g6h 添加新功能
# i7j8k9l 初始提交

# 回退到 "添加新功能" 那次提交
git reset --hard e4f5g6h

# 或者回退 2 个版本
git reset --hard HEAD~2

5.5 回退后后悔了?用 reflog 找回!

1
2
3
4
5
6
7
8
9
10
# 查看所有操作记录(包括被删除的提交)
git reflog

# 输出示例:
# a1b2c3d HEAD@{0}: reset: moving to HEAD~1
# e4f5g6h HEAD@{1}: commit: 修复 bug
# i7j8k9l HEAD@{2}: commit: 初始提交

# 恢复到回退前的状态
git reset --hard e4f5g6h

reflog 是救命稻草,即使使用了 git reset --hard,只要 reflog 还在,就能找回。

5.6 撤销工作区的修改(未 add)

1
2
3
4
5
6
7
# 撤销某个文件在工作区的修改(恢复到上次提交的状态)
git checkout -- src/main.py

# 撤销所有文件在工作区的修改
git checkout -- .

# ⚠️ 注意:这会丢失工作区的修改,谨慎使用!

5.7 撤销暂存区的修改(已 add 未 commit)

1
2
3
4
5
6
7
8
# 把文件从暂存区移回工作区(保留修改)
git reset HEAD src/main.py

# 撤销所有暂存
git reset HEAD

# 然后再用 checkout 撤销工作区修改(如果需要)
git checkout -- src/main.py

5.8 修改最后一次提交

1
2
3
4
5
6
7
8
# 修改提交信息
git commit --amend -m "新的提交信息"

# 追加文件到最后一次提交(先 add,再 amend)
git add 漏掉的文件
git commit --amend --no-edit

# ⚠️ 注意:如果已经 push 到远程,不要 amend!

5.9 回退实操练习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 场景 1:提交信息写错了
git commit -m "写错了的提交信息"
git commit --amend -m "正确的提交信息"

# 场景 2:提交了不该提交的文件
git add .
git commit -m "不小心提交了临时文件"
git reset --soft HEAD~1 # 回退到上次提交,保留修改
git reset HEAD 临时文件.txt # 从暂存区移除
git checkout -- 临时文件.txt # 恢复临时文件(如果需要)
git add . # 重新添加需要的文件
git commit -m "feat: 正确的提交"

# 场景 3:彻底放弃最近的所有修改
git status # 确认当前状态
git reset --hard HEAD # 回到最新提交,丢弃所有修改
# 或
git reset --hard HEAD~2 # 回退 2 个版本

# 场景 4:回退后后悔了
git reflog # 查看操作历史
git reset --hard HEAD@{1} # 恢复到回退前的状态

6. 分支管理

6.1 创建与切换分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看所有分支
git branch

# 创建新分支
git branch feature-login

# 切换到新分支
git checkout feature-login

# 创建并切换(一步完成)
git checkout -b feature-login

# 现代 Git 推荐写法
git switch -c feature-login

6.2 合并分支

1
2
3
4
5
6
7
8
9
# 切换到主分支
git checkout main

# 合并 feature-login 分支到当前分支
git merge feature-login

# 如果合并冲突,手动解决后
git add .
git commit -m "merge: 合并 feature-login 分支"

6.3 删除分支

1
2
3
4
5
# 删除已合并的分支
git branch -d feature-login

# 强制删除未合并的分支
git branch -D feature-login

6.4 储藏临时修改(Stash)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 储藏当前修改(临时保存,清空工作区)
git stash

# 查看储藏列表
git stash list

# 恢复最近储藏
git stash pop

# 恢复指定储藏
git stash apply stash@{1}

# 删除储藏
git stash drop stash@{0}

7. 标签与里程碑

1
2
3
4
5
6
7
8
9
10
11
# 创建标签
git tag -a v1.0 -m "版本 1.0 发布"

# 查看标签
git tag

# 切换到标签
git checkout v1.0

# 删除标签
git tag -d v1.0

8. 撤销与清理

8.1 清理未跟踪文件

1
2
3
4
5
6
7
8
9
10
11
# 查看会删除哪些文件(预览)
git clean -n

# 删除未跟踪文件
git clean -f

# 删除未跟踪文件和目录
git clean -fd

# 连 .gitignore 忽略的文件也删除
git clean -fdx

8.2 忽略文件权限变化

1
git config --global core.filemode false

9. 常用命令速查表

命令 说明
git init 初始化仓库
git add <file> 添加文件到暂存区
git add . 添加所有更改
git commit -m "msg" 提交更改
git status 查看状态
git diff 查看工作区差异
git log --oneline 查看提交历史
git log --graph --all 图形化查看分支
git reflog 查看操作记录
git reset --soft HEAD~1 软回退(保留修改)
git reset --mixed HEAD~1 混合回退(默认)
git reset --hard HEAD~1 硬回退(丢弃修改)
git checkout -- <file> 撤销工作区修改
git reset HEAD <file> 撤销暂存区修改
git commit --amend 修改最后一次提交
git branch 查看分支
git branch <name> 创建分支
git checkout <branch> 切换分支
git checkout -b <name> 创建并切换分支
git merge <branch> 合并分支
git stash 储藏临时修改
git stash pop 恢复储藏
git tag <name> 创建标签
git clean -fd 清理未跟踪文件

总结

Git 的核心就是围绕 工作区 → 暂存区 → 本地仓库 这三个区域的流转。

最重要的保命命令:

  1. git reflog —— 后悔药,能找回几乎所有操作
  2. git status —— 随时查看当前状态
  3. git log --oneline —— 快速查看历史

多练习,尤其是 git reset 的各种模式,这是本地版本控制的核心技能。


Happy Coding with Git! 🎉