第 2 章 · 01 基础概念与日常操作


文档摘要

第 2 章 · 01 基础概念与日常操作 本节摘要:Git 的一切操作都可以映射到"三区域"心智模型上:工作目录、暂存区、Git 目录。本节把三区域讲透,再覆盖日常高频操作:判断仓库、pull 与 fetch 的区别、gitignore 的用法、status/diff/add 的职责分工。学完本节,你能解释"每个 Git 命令动的是哪个区"。 学习目标 说出 Git 三区域的职责与对应命令。 区分 git pull 与 git fetch。 说出 gitignore 的作用与取消跟踪的方法。 说出 git status 与 git diff 的分工。

第 2 章 · 01 基础概念与日常操作

本节摘要:Git 的一切操作都可以映射到"三区域"心智模型上:工作目录、暂存区、Git 目录。本节把三区域讲透,再覆盖日常高频操作:判断仓库、pull 与 fetch 的区别、gitignore 的用法、status/diff/add 的职责分工。学完本节,你能解释"每个 Git 命令动的是哪个区"。

学习目标

  1. 说出 Git 三区域的职责与对应命令。
  2. 区分 git pull 与 git fetch。
  3. 说出 gitignore 的作用与取消跟踪的方法。
  4. 说出 git status 与 git diff 的分工。

一、三区域心智模型

区域 是什么 关键命令
工作目录 检出的一个版本快照,你修改的文件在这里 直接编辑
暂存区(索引) 记录"下一次提交将包含什么"的文件 git add
Git 目录 存储元数据与对象数据库,clone 时被完整复制 git commit

怎么判断目录是不是 git 仓库:看是否存在 .git 目录。

三区域 × 状态:工作目录里有改动但既不在 HEAD 也不在暂存区 → 称为 unstaged;暂存区里有了 → staged;已提交 → committed。

二、高频操作三兄弟

命令 职责
git status 理解仓库跟踪状态:哪些改动在工作目录、哪些在暂存区、哪些文件未被跟踪
git diff 对比差异:可对比两个提交、两个文件、树与暂存区等;提交前用它检查即将提交什么
git add FILES 把新文件/改动加入暂存区,让 Git 开始跟踪

判断文件是否被跟踪:

git ls-files <file> # 退出码 0 = 已跟踪 git blame <file> # 能出结果 = 已跟踪

新文件跟踪:git add FILES 即可。

三、pull 与 fetch

核心公式:git pull = git fetch + git merge

  • git fetch:把远端所有变更拉到本地,存到独立分支(如 origin/main),不影响当前工作分支——只看不并
  • git pull:拉取变更并直接合并到当前分支——拉完即并

记忆:fetch 是"下载",pull 是"下载+合并"。想先审查远端变更再决定是否合并,用 fetch;想直接同步,用 pull。

四、gitignore 与取消跟踪

gitignore 的用途:确保某些文件永远不被 Git 跟踪(密钥、构建产物、日志、本地配置)。

# .gitignore 示例 *.log .env node_modules/

关键区别:

  • 未跟踪的文件 → 写进 .gitignore 即可永远忽略;
  • 已跟踪的文件 → 仅写 gitignore 无效,必须 git rm --cached <file> 先取消跟踪(文件保留在磁盘上)。

要彻底停止跟踪某个已跟踪文件:git rm --cached + 加入 .gitignore + 提交。

五、版本控制最佳实践

  • 提交信息要有描述性;
  • 每个提交是一个逻辑单元;
  • 频繁合并他人变更、频繁分享自己的变更;
  • 与同事协调;
  • 不提交生成文件(generated files)与二进制文件。

小结

  • 三区域:工作目录(编辑)→ 暂存区(add)→ Git 目录(commit)。
  • pull = fetch + merge:fetch 只下载, pull 下载并合并。
  • gitignore 只管未跟踪文件;已跟踪文件需 git rm --cached
  • status 看状态、diff 看差异、add 进暂存

下一节预告:单分支操作熟练后,进入分支合并与历史管理——merge、rebase、reset 的世界。


发布者: 作者: 灏天文库 转发
评论区 (0)
U