Git 工作区、暂存区与版本库

Git 工作区、暂存区与版本库

深入理解Git的三个核心区域,掌握版本控制的核心机制

开始学习

Git 三区域概念

Git 的核心是三个主要区域:工作区、暂存区和版本库。理解这三个区域及其交互方式是掌握Git的关键。


工作区
Working Directory

暂存区
Staging Area

Git仓库
Git Repository

工作区

工作区是你在电脑上看到的目录,是你实际编辑文件的地方。这些文件可能处于三种状态:

  • 未跟踪:新文件,Git尚未开始跟踪
  • 已修改:已跟踪文件的内容发生了变化
  • 未修改:文件与版本库中的一致

暂存区

暂存区(也称为索引)是一个中间区域,用于准备下一次提交的内容。

  • 暂存区保存了将要包含在下一次提交中的文件快照
  • 使用 git add 将文件从工作区移动到暂存区
  • 允许你选择性地提交部分更改

版本库

Git仓库是Git存储项目元数据和对象数据库的地方。

  • 包含项目的完整历史记录
  • 使用 git commit 将暂存区的内容保存到版本库
  • 每次提交都会创建一个永久的项目快照

Git 基本工作流程

Git的基本工作流程涉及三个区域之间的文件移动:

1. 修改文件

在工作目录中编辑文件

工作区

2. 暂存更改

使用 git add 将文件添加到暂存区

暂存区

3. 提交更改

使用 git commit 将更改保存到版本库

版本库

提示: 暂存区允许你精确控制哪些更改将包含在下一次提交中。你可以只暂存部分文件的更改,或者一个文件的部分更改。

文件状态生命周期

未跟踪

新文件,Git尚未开始跟踪

已修改

已跟踪文件的内容发生了变化

已暂存

修改已添加到暂存区,准备提交

已提交

文件已安全保存在本地数据库中

常用命令与操作

工作区相关命令

  • git status

    查看工作区和暂存区的状态

  • git diff

    查看工作区与暂存区的差异

  • git checkout -- <file>

    撤销工作区的修改

  • git clean -fd

    删除未跟踪的文件和目录

暂存区相关命令

  • git add <file>

    将文件添加到暂存区

  • git add .

    添加所有修改和新增文件到暂存区

  • git reset <file>

    将文件从暂存区移回工作区

  • git add -p

    交互式选择要暂存的更改

版本库相关命令

  • git commit -m "message"

    提交暂存区的更改到版本库

  • git log

    查看提交历史

  • git reset --soft HEAD~1

    撤销最新提交,保留更改在暂存区

  • git reset --hard HEAD~1

    撤销最新提交,删除所有更改

区域间移动命令

  • git add <file>

    工作区 → 暂存区

  • git reset <file>

    暂存区 → 工作区

  • git commit

    暂存区 → 版本库

  • git checkout <file>

    版本库 → 工作区

实战示例

典型工作流程示例

# 1. 在工作区创建新文件
echo "# My Project" > README.md

# 2. 查看当前状态
git status
# 输出: README.md 是未跟踪文件

# 3. 将文件添加到暂存区
git add README.md

# 4. 再次查看状态
git status
# 输出: README.md 是新文件,将被提交

# 5. 提交到版本库
git commit -m "Add README file"

# 6. 修改文件内容
echo "This is my project description" >> README.md

# 7. 查看工作区与版本库的差异
git diff

# 8. 添加修改到暂存区并提交
git add README.md
git commit -m "Update README with description"

区域状态对比

操作 工作区 暂存区 版本库
初始状态 文件A - -
git add 文件A 文件A 文件A -
git commit 文件A - 文件A
修改文件A 文件A(修改) - 文件A
git add 文件A 文件A(修改) 文件A(修改) 文件A
git commit 文件A(修改) - 文件A(修改)

理解要点:

  • 工作区是你实际编辑文件的地方
  • 暂存区是你准备提交的更改的集合
  • 版本库保存了项目的完整历史记录
  • 文件可以在三个区域之间移动,状态也会相应改变