【Git-1/Lesson6(2025-10-24)】Git 全面入门指南:从零开始掌握分布式版本控制 🌟

62 阅读7分钟

💡 Git 是现代软件开发的基石。无论你是独立开发者,还是参与大型团队协作,掌握 Git 都是必不可少的技能。本文将基于你提供的学习概要,系统、全面、深入地讲解 Git 的核心概念与操作流程,并补充大量实用细节,助你真正理解 Git 的工作原理。


📁 一、Git 基础认知:仓库、分支与协作

❌ 同一个项目中不能有多个 Git 仓库?

正确理解
虽然技术上可以在一个项目目录下嵌套多个 .git 目录(即子模块或子仓库),但常规开发实践中,一个逻辑项目应只对应一个 Git 仓库
原因如下:

  • 管理混乱:多个仓库会导致提交历史割裂,难以追踪整体变更。
  • 协作困难:团队成员无法统一拉取/推送代码。
  • 工具链不兼容:CI/CD、IDE 插件等通常默认识别根目录下的 .git

🧠 最佳实践
如果你需要管理多个相关项目,推荐使用:

  • Monorepo(单体仓库):如 React、Babel 等大型项目采用的方式,所有子项目放在一个仓库中,通过目录区分。
  • Git Submodule / Subtree:用于引入外部依赖仓库(高级用法,初学者慎用)。

🚀 二、初始化本地 Git 仓库

1. 创建开发目录

mkdir lesson_zp
cd lesson_zp

⚠️ 此时 lesson_zp 只是一个普通文件夹,没有版本控制能力。删除文件就永久丢失,无法回退历史版本——这就是为什么我们需要 Git!

2. 初始化仓库:git init

git init

执行后,Git 会在当前目录创建一个隐藏文件夹 .git,这就是本地仓库的核心,包含:

  • 对象数据库(存储文件快照)
  • 引用(refs):如分支、标签
  • HEAD 指针
  • 配置文件

🌳 默认分支名称
早期 Git 默认创建 master 分支。如今许多平台(如 GitHub、Gitee)已改为 main
你可以通过以下命令查看或修改默认分支名:

git config --global init.defaultBranch main

👤 三、配置 Git 用户信息(必须!)

每次提交都需要身份标识,否则 Git 会报错。

git config --global user.name "shunwuyu2020"
git config --global user.email "shunwu2001@163.com"

🔍 参数说明:

  • --global:全局配置,对所有仓库生效。若省略,则仅对当前仓库生效。
  • 邮箱建议使用与 Gitee/GitHub 注册一致的邮箱,便于关联贡献记录。

📝 四、Git 工作流核心:三区模型

Git 的核心在于理解 三个区域

区域说明
工作区(Working Directory)你日常编辑的文件所在目录
暂存区(Staging Area / Index)临时存放准备提交的修改
仓库(Repository / .git)存储所有历史版本的地方

🔍 查看状态:git status

这是最基础也最重要的命令!在任何操作前,先运行它:

git status

输出示例:

  • "Untracked files":新文件,未被 Git 跟踪。
  • "Changes not staged for commit":已跟踪但未暂存的修改。
  • "Changes to be committed":已暂存,准备提交。

好习惯:每次 addcommitcheckout 前都先 git status


➕ 五、添加文件到暂存区:git add

git add readme.txt        # 添加单个文件
git add .                 # 添加当前目录所有修改(包括新文件、修改、删除)
git add *.js              # 添加所有 .js 文件

💡 git add 的本质是将工作区的修改“快照”保存到暂存区,为下一次提交做准备。


✅ 六、提交到仓库:git commit

git commit -m 'wrote a readme file'

关键点解析:

1. 提交的是“修改”,不是整个文件

Git 存储的是文件内容的差异(delta),而非完整副本。高效且节省空间。

2. 提交 ID 为何用 SHA-1 哈希?

  • 唯一性:SHA-1 生成 40 位十六进制字符串(如 a1b2c3d...),几乎不可能重复。
  • 去中心化:多人协作时,无需中央服务器分配 ID,各自生成仍能保证全局唯一。
  • 防篡改:任何内容改动都会导致哈希值变化,确保历史不可伪造。

🆚 对比自增 ID(如 SVN):

  • 自增 ID 依赖中央服务器,在分布式场景下无法工作。
  • Git 是分布式版本控制系统(DVCS),每个开发者都有完整仓库副本。

3. 提交信息规范

  • 使用现在时动词开头:Add login feature 而非 Added...
  • 首行简明扼要(<50 字),空一行后可写详细描述
  • 示例:
    git commit -m "feat: add user authentication module
    
    - implement JWT token generation
    - add /login and /register endpoints
    - write unit tests"
    

🔍 七、查看差异:git diff

在重大提交前,务必检查修改内容:

git diff              # 查看工作区 vs 暂存区
git diff --cached     # 查看暂存区 vs 最近一次提交
git diff HEAD         # 查看工作区 vs 最近一次提交

黄金法则
提交前先 git diff,确认无误再 commit。避免误提交调试代码、敏感信息等。


🧹 八、“干净”的工作区是什么意思?

git status 显示:

nothing to commit, working tree clean

说明:

  • 所有文件都已被跟踪
  • 没有未暂存的修改
  • 没有未提交的暂存内容

🌈 这就是“干净”的状态,是进行分支切换、合并、发布前的理想状态。


🔙 九、版本回退:穿越时空的魔法

1. 查看提交历史

git log --oneline

输出示例:

36803fa (HEAD -> master) append GPL
a1b2c3d initial commit
  • 36803fa:提交的短哈希 ID
  • HEAD -> master:当前位于 master 分支的最新提交

2. 回退到上一个版本

git reset --hard HEAD^
  • HEAD^ 表示“当前提交的父提交”
  • --hard同时重置工作区和暂存区(危险!会丢弃所有未提交修改)

⚠️ 谨慎使用 --hard!建议先 git stash 保存现场。

3. 回退多个版本

git reset --hard HEAD~2    # 回退两个版本
git reset --hard a1b2c3d   # 回退到指定提交 ID

🔁 注意reset删除后续提交。若已推送到远程,需强制推送(git push -f),可能影响他人。


🔄 十、撤销工作区修改:git checkout --

git checkout -- readme.txt

作用:丢弃工作区对 readme.txt 的修改,恢复到最近一次提交的状态

🛑 注意:此操作不可逆!确保你真的不需要这些修改。

💡 现代 Git 推荐使用 git restore(2.23+):

git restore readme.txt          # 撤销工作区修改
git restore --staged readme.txt # 从暂存区移除(相当于取消 add)

☁️ 十一、连接远程仓库(以 Gitee 为例)

1. 在 Gitee 创建空仓库

  • 登录 Gitee
  • 新建仓库 lesson_zp不要初始化 README

2. 关联本地与远程

git remote add origin https://gitee.com/shunwuyu2020/lesson_zp.git
  • origin 是远程仓库的默认别名(可自定义)
  • URL 支持 HTTPS 或 SSH(推荐 SSH,免密码)

3. 推送代码到远程

git push origin master

🚨 首次推送可能失败,因为远程有默认分支(如 main)。解决方法:

git push -u origin master   # -u 设置上游分支,后续只需 git push

或统一使用 main

git branch -M main
git push -u origin main

🌐 十二、Git 的核心价值:分布式协作

🌕 Git 就是程序员的“月光宝盒”

  • 版本回溯:随时回到任意历史状态
  • 分支隔离:开发新功能不影响主干
  • 多人协作:通过 pull / push 同步代码
  • 备份安全:每个开发者都是完整备份

📌 总结:Git 核心命令速查表

场景命令
初始化仓库git init
配置用户git config --global user.name "xxx"
查看状态git status
添加文件git add .
提交修改git commit -m "message"
查看差异git diff
查看日志git log --oneline
版本回退git reset --hard HEAD^
撤销修改git checkout -- file
关联远程git remote add origin URL
推送代码git push origin master

🎯 结语

Git 不仅是工具,更是一种工程思维。掌握它,你就拥有了:

  • 代码的“时间机器” ⏪
  • 团队协作的“高速公路” 🛣️
  • 项目演进的“清晰地图” 🗺️

💬 记住:每天 git status,提交前 git diff,推送前 git log —— 你将成为团队中最可靠的开发者!


Happy Git-ing!
🚀 你的代码,值得被好好管理!