# Git 基础概念与原理 > 📚 Git 教程系列 - 第 1 篇 > 📅 最后更新:2026-03-15 > 📖 适合人群:Git 零基础初学者 --- ## 📌 什么是 Git? **Git** 是一个开源的**分布式版本控制系统**,用于敏捷高效地处理任何或小或大的项目。 - **开发者**:Linus Torvalds(Linux 之父) - **诞生时间**:2005 年 - **初衷**:帮助管理 Linux 内核开发 - **特点**:分布式、开源、高效、安全 --- ## 🎯 为什么需要版本控制? ### 问题场景 你有没有遇到过这些情况: ``` 项目/ ├── 最终版.py ├── 最终版 2.py ├── 最终版 3.py ├── 最终版 4.py ├── 真最终版.py ├── 真最终版 2.py ├── 真最终版_这次真的是最终版.py └── 真最终版_再改我是狗.py ``` 😂 是不是很熟悉? ### 版本控制解决的问题 | 问题 | Git 解决方案 | |------|-------------| | 文件版本混乱 | 自动记录每次修改 | | 代码丢失 | 可以随时回退到任意版本 | | 团队协作冲突 | 智能合并,解决冲突 | | 不知道谁改了什么 | 完整的修改历史记录 | | 备份困难 | 分布式存储,多处备份 | --- ## 🔄 Git vs SVN ### 核心区别 | 特性 | Git | SVN | |------|-----|-----| | **架构** | 分布式 | 集中式 | | **存储方式** | 元数据(SHA-1 哈希) | 文件差异 | | **分支** | 轻量级分支(指针) | 目录副本 | | **版本号** | commit hash(如 a1b2c3d) | 全局数字(如 r123) | | **网络依赖** | 不需要(本地操作) | 需要(连接服务器) | | **速度** | 快 | 较慢 | | **安全性** | 高(SHA-1 校验) | 一般 | ### 架构图解 ``` 【SVN 集中式】 开发者 1 ──┐ 开发者 2 ──┼──► 中央服务器(唯一版本库) 开发者 3 ──┘ 【Git 分布式】 开发者 1 ──┐ 开发者 2 ──┼── 完整版本库副本(每个人都是完整的) 开发者 3 ──┘ │ └──► 远程仓库(用于同步) ``` --- ## 🧠 Git 核心概念 ### 1. 工作区(Working Directory) 就是你电脑上能看到的项目文件夹。 ``` ~/project/ ← 工作区 ├── .git/ ← Git 版本库 ├── src/ ├── README.md └── main.py ``` ### 2. 版本库(Repository) 工作区中的 `.git` 隐藏文件夹,存储所有版本信息。 ``` .git/ ├── objects/ # 存储所有版本的对象 ├── refs/ # 存储分支和标签 ├── HEAD # 当前分支指针 └── config # Git 配置 ``` ### 3. 暂存区(Stage/Index) 临时存放已修改但未提交的文件。 ``` 工作区 ──► 暂存区 ──► 版本库 git add git commit ``` ### 4. 分支(Branch) Git 的分支是**轻量级的指针**,指向某个 commit。 ``` main 分支:A ──► B ──► C │ feature 分支:───────► D ──► E ``` ### 5. 提交(Commit) 每次 `git commit` 都会创建一个**快照**,包含: - 文件的完整内容 - 作者信息 - 提交时间 - 提交信息 - 父 commit 的 hash ``` commit a1b2c3d4e5f6 Author: Deshill Date: Sun Mar 15 21:00:00 2026 +0800 添加用户登录功能 ``` ### 6. HEAD 指针 指向当前所在的分支。 ``` HEAD ──► main ──► commit a1b2c3d ``` --- ## 📊 Git 文件状态 文件在 Git 中有四种状态: ``` ┌─────────────┐ │ Untracked │ ← 新文件,Git 未跟踪 └──────┬──────┘ │ git add ▼ ┌─────────────┐ │ Staged │ ← 已暂存,等待提交 └──────┬──────┘ │ git commit ▼ ┌─────────────┐ │ Committed │ ← 已提交到版本库 └──────┬──────┘ │ git 修改 ▼ ┌─────────────┐ │ Modified │ ← 已修改,未暂存 └─────────────┘ ``` --- ## 🔐 Git 数据完整性 Git 使用 **SHA-1 哈希算法** 确保数据完整性: - 每个文件、commit、tree 都有唯一的 40 位 hash - 任何修改都会改变 hash 值 - 磁盘故障或网络问题时可检测并恢复 ``` # 查看 commit 的 hash git log --oneline # 输出示例 a1b2c3d 添加用户登录功能 e5f6g7h 修复登录 bug i9j0k1l 初始化项目 ``` --- ## 🎓 工作流程图解 ### 基本工作流程 ``` 1. 修改文件(工作区) ↓ 2. git add(添加到暂存区) ↓ 3. git commit(提交到版本库) ↓ 4. git push(推送到远程仓库) ``` ### 完整协作流程 ``` ┌─────────────────────────────────────────────────┐ │ 远程仓库 (GitHub/Gitee) │ └───────────────────┬─────────────────────────────┘ │ ┌───────────┼───────────┐ │ git push │ git pull │ ▼ │ ▼ ┌───────────────┐ │ ┌───────────────┐ │ 你的本地仓库 │◄──┘ │ 同事的本地仓库 │ └───────────────┘ └───────────────┘ ``` --- ## 📚 学习路线 本教程将带你从零开始掌握 Git: 1. ✅ **基础概念**(本篇) 2. 📝 **Windows 安装与配置** 3. 🐧 **Linux 安装与配置** 4. 🛠️ **常用命令与实战** 5. 🌿 **分支管理** 6. 🌐 **远程仓库操作** 7. ⏮️ **版本回退与恢复** 8. 💡 **最佳实践与常见问题** --- ## 🎯 小结 | 概念 | 说明 | |------|------| | **Git** | 分布式版本控制系统 | | **工作区** | 你电脑上的项目文件夹 | | **版本库** | `.git` 文件夹,存储所有版本 | | **暂存区** | 临时存放已修改未提交的文件 | | **分支** | 轻量级指针,指向某个 commit | | **HEAD** | 指向当前所在分支 | | **SHA-1** | 确保数据完整性的哈希算法 | --- ## ❓ 常见问题 **Q1: Git 和 GitHub 是什么关系?** - Git 是版本控制工具 - GitHub 是使用 Git 的代码托管平台 - 类似:Git 是"工具",GitHub 是"服务" **Q2: 我需要一个 Git 服务器吗?** - 不需要!Git 是分布式的,本地就能用 - 但团队协作时建议用 GitHub/Gitee **Q3: Git 难学吗?** - 基础操作很简单(add、commit、push) - 高级功能(分支、合并、rebase)需要练习 - 跟着本教程一步步来,没问题! --- > 💡 **下一步**:继续学习 [02-Windows 安装与配置](./02-Windows 安装与配置.md)