Skip to content

什么是仓库?

理解 Git 仓库——.git 文件夹、工作目录与暂存区。

你将学到

  • 仓库(repo)是什么,它包含什么
  • 三个区域:工作目录、暂存区和历史
  • 隐藏的 .git 文件夹的作用
  • 文件的生命周期:未追踪、已暂存、已提交

概念讲解

什么是仓库?

仓库(常简称为 repo)是被 Git 追踪的目录。它包含你的项目文件以及你所有变更的历史。

你可以把仓库想象成一个 Git 已入驻的文件夹——它监视里面的每个文件,让你保存快照(提交),并记住项目的整个历史。

三个区域

Git 把项目分为三个逻辑区域:

  1. 工作目录——你在编辑器中看到和编辑的实际文件。这是你写代码的地方。
  1. 暂存区(索引)——一个临时暂存区,你把想纳入下次提交的文件放在这里。用 git add 添加。
  1. 仓库(.git 目录)——永久历史。当你 git commit 时,暂存的快照保存在这里。所有提交、分支和标签都在这里。

流程是:

工作目录  →  git add  →  暂存区  →  git commit  →  仓库

.git 文件夹

运行 git init 时,Git 在项目目录内创建一个隐藏的 .git 文件夹。这个文件夹包含 Git 关于你项目的一切:

  • objects/——所有压缩的快照和文件内容
  • refs/——指向提交的指针(分支和标签)
  • HEAD——指向当前分支的文件
  • config——仓库特定设置

永远不要删除或手动编辑 .git 文件夹——这样做可能损坏仓库并丢失所有历史。如果你想停止追踪项目,可以安全删除 .git 文件夹,但会丢失所有历史。

文件生命周期

Git 仓库中的文件经历以下状态:

  • 未追踪(Untracked)——Git 看到了文件但尚未追踪(用 git add 开始追踪)
  • 已暂存(Staged)——文件在暂存区,准备提交
  • 已提交(Committed)——文件安全存储在仓库历史中
  • 已修改(Modified)——被追踪的文件在上次提交后被更改
untracked → (git add) → staged → (git commit) → committed
committed → (编辑文件) → modified → (git add) → staged → (git commit) → committed

理解这些状态是看懂 git status 输出的关键。

示例代码

              # 创建一个新目录并转为 Git 仓库
mkdir my-project
cd my-project
git init

# Git 创建了隐藏的 .git 文件夹——看看里面
ls -la .git

# 创建一个文件——它是未追踪的
echo "Hello Git" > README.md

# 检查状态——Git 看到了文件但没在追踪
git status

# 暂存文件——现在它在暂存区
git add README.md

# 再次检查状态——文件已暂存
git status

# 提交文件——现在它在仓库历史中
git commit -m "Add README"

# 检查状态——工作树干净
git status
            

完整走了一遍生命周期:创建仓库、添加文件、暂存、提交。每步后运行 git status 看文件如何在状态间移动。

动手试一试

  • .gitignore Generator

    创建 .gitignore 把不需要的文件挡在仓库外。

  • Code Diff

    比较两个文件版本——类似 Git 提交时显示的差异。

常见错误

错误写法

删除 .git 文件夹导致丢失所有项目历史

正确做法

.git 文件夹包含整个仓库历史。除非你有意停止追踪项目,否则永远不要删除它。定期备份或推送到远程。

错误写法

把暂存区和仓库混淆

正确做法

暂存区(git add 后)的文件尚未保存到历史。只有运行 git commit 才保存。如果编辑了已暂存文件,需要再次 git add。

相关速查表

查阅不认识的术语

新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。

查看术语表

动手做项目

通过引导式项目应用所学,含起始代码与解决方案。

查看项目

解读错误信息

用大白话解释常见错误——什么意思、为什么发生、如何修复。

查看错误