CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Git/GitHub 入门实战/课时/Git 基础概念
RawBlame
课时目录12 节

Git/GitHub 入门实战

  1. 01Git 基础概念
  2. 02基本 Git 操作
  3. 03Git 进阶
  4. 04GitHub 入门
  5. 05协作基础
  6. 06分支工作流
  7. 07Pull Request
  8. 08Issues 管理
  9. 09团队协作
  10. 10安全习惯
  11. 11路线图对照
  12. 12综合练习

Git 基础概念

版本控制与仓库直觉。

25 分钟

Git 基础概念

这一课你将能做到

  1. 用一句话说清 Git 是什么、解决什么问题,并解释「版本控制」的真实含义
  2. 在本机安装 Git、完成身份配置(user.name / user.email),并用 git --version 验证
  3. 讲清 Git 的三大区域(工作区、暂存区、仓库)以及文件在它们之间的流转

为什么要学

想象你写论文:改一版存一份「论文v1.docx」「论文v2.docx」「论文最终版.docx」「论文最终版真的不改了.docx」……一周后你自己都分不清哪份是哪份。代码比论文严重得多:多人同时改同一个文件、要回滚到上周能跑的版本、要知道某行代码是谁什么时候为什么改的。版本控制系统(VCS)就是干这个的。

Git 是目前事实上的唯一标准:Linux 内核、Spring、Vue、你公司的项目、本站 java-nav 的代码,全部托管在 Git 上。不会 Git 就没法参与任何现代团队协作,面试第一关就过不去。学会 Git 的回报是终身的——它是程序员最重要的工具,没有之一。

先建立图像

Git 的核心心智模型是三大区域 + 一条提交历史链:

工作区 (Working Directory)      暂存区 (Staging Area)      本地仓库 (Repository)
┌──────────────────┐   add   ┌──────────────────┐ commit ┌──────────────────┐
│ 你正在编辑的文件   │ ──────> │ 准备打包的改动清单 │ ─────> │ 永久的版本快照     │
│ UserService.java │         │ UserService.java │        │ commit a1b2c3    │
│ index.html       │ <────── │                  │ <───── │ commit d4e5f6    │
└──────────────────┘ restore └──────────────────┘ reset  └──────────────────┘

提交历史是一条链,每个 commit 有一个唯一哈希(如 a1b2c3d),指向它的「父亲」:

HEAD -> main
A(初始提交) <- B(加登录) <- C(修bug) <- D(加缓存)

理解这张图,后面所有命令(add / commit / reset / restore / switch)都只是在这三个区域之间搬动文件。

跟着做

步骤 1:安装 Git 并验证

Windows 去 git-scm.com 下载安装包,一路下一步即可。macOS 用 brew install git,Linux 用发行版包管理器。装完打开终端:

git --version
# git version 2.45.0.windows.1   ← 看到版本号即成功

步骤 2:配置身份(全局只需一次)

Git 会把作者信息写进每条 commit,必须先配置:

git config --global user.name "Zhang San"
git config --global user.email "zhangsan@example.com"
git config --global init.defaultBranch main
git config --list

--list 能回显你的配置,确认 name/email 没写错。邮箱建议和 GitHub 账号一致,这样提交头像能正确显示。

步骤 3:创建第一个仓库

mkdir git-demo && cd git-demo
git init
# Initialized empty Git repository in .../git-demo/.git/

git init 在当前目录生成隐藏的 .git/ 文件夹——这就是「本地仓库」,里面存了所有历史。删掉它,这个目录就退回普通文件夹。

步骤 4:感受三大区域

echo "hello git" > README.md
git status
# Untracked files: README.md     ← 在工作区,Git 还没跟踪

git add README.md
git status
# Changes to be committed: new file: README.md   ← 进了暂存区

git commit -m "初始提交:添加 README"
git status
# nothing to commit, working tree clean          ← 进了仓库,工作区干净

git status 是你用得最多的命令,任何时候不知道当前什么状态,敲它。

讲清楚要点

  1. Git 是分布式版本控制:每个人电脑上都有完整历史,不联网也能提交、看日志、切分支。这是和 SVN(集中式)的本质区别——SVN 服务器挂了大家都停工,Git 无所谓。
  2. commit 是快照不是差异:每个 commit 记录的是那一刻所有文件的完整快照(内部用哈希去重,所以不贵)。理解成「存档点」:随时可以读档回到任何一个。
  3. 暂存区是「打包台」:你改了 5 个文件,但只想把其中 2 个作为一次提交,就先 git add 那 2 个到暂存区,再 commit。暂存区让你精确控制每次提交的内容。
  4. commit message 要写成「做了什么」:如「修复登录接口空指针」「新增用户导出 CSV」。不要写「update」「fix」「改了点东西」——三个月后你自己都不知道改了啥。
  5. .git 目录就是一切:它包含全部对象、分支指针、配置。git clone 本质就是把它完整拷一份。

你可能会懵的地方

  • Git 和 GitHub 是一个东西吗? 不是。Git 是装在你电脑上的版本控制工具(本地软件);GitHub 是把 Git 仓库放到云端的托管网站(还有 GitLab、Gitee 等)。可以只用 Git 不用 GitHub,但团队协作基本离不开托管平台。

  • 为什么说 Git 几乎不丢数据? 只要 commit 过,内容就进了 .git 对象库,即使你删了分支、reset 错了,也能通过 git reflog 找回。真正危险的是「从未 commit 的修改」——所以养成勤提交的习惯。

  • git add . 和 git add -A 一样吗? 现代 Git 里基本等价(都暂存当前目录全部变化)。老版本里 git add -A 会包含仓库根目录外的路径。日常用 git add . 或 git add 具体文件 即可。

  • commit 的哈希为什么是 40 位乱码? 那是 SHA-1 哈希,由提交内容+作者+时间+父提交计算而来,保证全球唯一。平时显示前 7 位(如 a1b2c3d)就够用了。

  • 一个文件夹能同时属于两个仓库吗? 不能也不应该。.git 只能有一个。常见踩坑:在项目父目录误敲 git init,导致子目录的 .git 被嵌套。

错法对照

错法问题正解
直接改代码从不 commit崩溃/改错无法回滚每完成一个小功能就 commit
commit message 写「update」「aaa」无法追溯改动意图用祈使句写清楚做了什么
在桌面/根目录随手 git init把整个盘变成仓库只在项目根目录 init
把 node_modules、.idea 提交进去仓库膨胀、冲突不断用 .gitignore 排除
git config 不写 --global 又换了目录每个项目都要重配全局配一次,项目级再覆盖

卡点急救

  1. git 命令提示「不是内部或外部命令」:Windows 安装时没加 PATH。重新运行安装包,勾选「Git from the command line」,或重装后重启终端。
  2. 误在错误目录执行了 git init:直接删掉该目录下隐藏的 .git 文件夹即可(Remove-Item -Recurse -Force .git),不影响文件本身。
  3. commit 后想改作者信息:最近一次提交用 git commit --amend --reset-author --no-edit;历史批量改写用 git filter-repo(初学者先知道有这回事)。

面试常问

  • Git 和 SVN 的区别? 核心:Git 分布式、SVN 集中式。Git 每人本地有完整仓库,离线可提交、分支极轻量(指针移动);SVN 依赖中央服务器,分支是目录拷贝、又重又慢。Git 合并基于三方对比,SVN 容易冲突。

  • Git 的三大区域是什么? 工作区(Working Directory):磁盘上实际编辑的文件;暂存区(Staging/Index):git add 后放入的待提交清单;本地仓库(Repository):git commit 后形成的永久快照,存于 .git。文件流转:工作区 →(add)→ 暂存区 →(commit)→ 仓库。

  • 为什么说 Git 的 commit 是不可变的? 每个 commit 的哈希由内容计算而来,内容一改哈希就变,等于生成了新 commit。所以历史无法被悄悄篡改——这是 Git 完整性的基石。

自测三问

  1. 工作区、暂存区、本地仓库分别存什么?用哪两个命令在它们之间移动文件?
  2. git init 做了什么?删掉 .git 会发生什么?
  3. 为什么要求 commit message 写清楚?给出一个好例子和一个坏例子。

小结一句话

Git 通过「工作区—暂存区—仓库」三层结构管理代码快照,commit 是链式存档点,学会它你就拥有了代码的时光机。

延伸

  • Pro Git 中文版(官方权威书)
  • 下一课:基本 Git 操作——真正开始 add / commit / log / restore,把本站代码跑起来改一遍。
加载本节练习…
下一课 →基本 Git 操作