📚Git 学习笔记(2):从零掌握本地仓库操作

113 阅读6分钟

🌟 前言:理解本地仓库的核心操作

"前面我们学习了如何上传代码到远程仓库中,今天来学习一下如何操作本地仓库,一些添加、回退、创建等操作,并且理解工作区、暂存区和本地仓库之间的关系。"

Git 不只是一个“上传代码”的工具,它更是一个强大的版本控制系统
你写的每一行代码、每一次修改,都可以被记录、回退、对比——就像拥有一个“月光宝盒”。

本笔记将带你深入理解:

  • ✅ 工作区、暂存区、本地仓库的三区模型
  • ✅ 如何安全地添加、提交、查看差异
  • ✅ 如何优雅地回退版本、撤销修改
  • ✅ 为什么 Git 使用 SHA 哈希 ID 而不是自增 ID

💡 目标
让你从“会用 Git”升级为“懂 Git”,为后续多人协作打下坚实基础。


🧩 一、Git 三大核心区域

tongyi-mermaid-2025-10-24-185007.png

区域说明
工作区你正在编辑的文件目录(如 readme.txt
暂存区临时存放你准备提交的修改(通过 git add
本地仓库存储所有历史版本的数据库(.git 目录)

📌 核心流程
修改文件 → git addgit commit → 版本保存


🛠️ 二、基础操作命令详解

1. git status:查看仓库状态(必用!)

bash
编辑
git status

🔍 作用
查看当前工作区状态,是所有操作前的必备检查

输出示例:
bash
编辑
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
        modified:   readme.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        newfile.txt
  • modified:文件已修改,但未 add
  • Untracked files:新文件,未被 Git 跟踪

2. git add <file>:添加到暂存区

bash
编辑
git add readme.txt

作用
将文件的当前修改放入“待提交队列”(暂存区)。

💡 提示:

  • git add .:添加所有修改
  • 添加后,文件进入“准备提交”状态

3. git commit -m "message":提交到本地仓库

bash
编辑
git commit -m "append GPL"

作用
将暂存区的内容永久保存到本地仓库,生成一个新版本。

提交后输出:
bash
编辑
[master fc19bcd] append GPL
 1 file changed, 2 insertions(+)
  • fc19bcd:本次提交的短哈希 ID
  • 2 insertions:新增 2 行代码

🔐 三、为什么用 SHA 哈希 ID?不用自增 ID?

自增 IDSHA 哈希 ID
❌ 1, 2, 3...✅ fc19bcd...(唯一哈希)
❌ 多人协作时容易冲突(两个分支都叫“3”)✅ 全局唯一,不怕冲突
❌ 无法验证数据完整性✅ 哈希值可验证内容是否被篡改

🌐 类比

  • 自增 ID 像“房间号”(可能重复)
  • SHA ID 像“指纹”(全球唯一)

🔍 四、查看差异:git diff

bash
编辑
git diff

🔍 作用
查看工作区暂存区之间的差异(未 add 的修改)。

使用场景:
  • 重大提交前,先 git diff 确认修改内容
  • 避免误提交不该提交的代码

💡 提示:

  • git diff --staged:查看已 add 但未 commit 的差异

🧼 五、干净的仓库(Clean Working Tree)

bash
编辑
git status
# 输出:
# On branch master
# nothing to commit, working tree clean

图片事例

屏幕截图 2025-10-24 185936.png

含义

  • 所有修改都已提交
  • 没有未跟踪文件
  • 仓库处于“干净”状态

📌 最佳实践
每次提交后,确保仓库干净,便于后续操作。


🕰️ 六、版本回退与指针操作

1. HEAD 指针

bash
编辑
fc19bcd (HEAD -> master) append GPL
  • HEAD:指向当前分支的最新提交
  • master:当前分支名

🌐 比喻
HEAD 像“播放头”,指向你当前查看的版本。


2. git reset --hard HEAD^:回退到上一个版本

bash
编辑
git reset --hard HEAD^
  • HEAD:当前提交
  • ^:前一个版本
  • ^2:前两个版本
  • ~3:往前 3 个提交
示例:
bash
编辑
git reset --hard HEAD^    # 回退 1 个版本
git reset --hard fc19bcd  # 回退到指定版本

⚠️ 警告
--hard丢弃工作区修改,慎用!


3. git log --oneline:查看提交历史

bash
编辑
git log --oneline
输出:
bash
编辑
fc19bcd (HEAD -> master) append GPL
abc1234 wrote a readme file

✅ 快速查看所有提交的短 ID提交信息


4. git reflog:查看所有操作记录

bash
编辑
git reflog
输出:
bash
编辑
fc19bcd HEAD@{0}: reset: moving to HEAD^
abc1234 HEAD@{1}: commit: append GPL

图片事例

屏幕截图 2025-10-24 185647.png

作用
记录你所有的 Git 操作(包括 reset),是“后悔药”!

💡 场景
误删提交?用 git reflog 找回 ID,再 git reset 恢复!


5. git checkout -- <file>:撤销修改

bash
编辑
git checkout -- readme.txt

作用
将文件恢复到最近一次提交的状态,丢弃所有未提交的修改。

⚠️ 警告
此操作不可逆!修改将永久丢失。


效果展示:

屏幕截图 2025-10-24 225930.png

屏幕截图 2025-10-24 225930.png

🖼️ 七、图解:Git 操作流程

tongyi-mermaid-2025-10-24-184641.png

📌 核心记忆
工作区 → 暂存区 → 本地仓库 → 可回退、可撤销

代码演示:

graph TB

A[工作区] -->|git add| B[暂存区]

B -->|git commit| C[本地仓库]

C -->|git reset --hard| A

A -->|git checkout -- file| C

C -->|git log| D[查看历史]

C -->|git reflog| E[查看操作记录]


💼 八、大厂高频面试题(Git 专项)

❓ Q1: 工作区、暂存区、本地仓库的区别是什么?

参考回答

  • 工作区:你正在编辑的文件目录
  • 暂存区:通过 git add 临时存放修改,准备提交
  • 本地仓库:通过 git commit 永久保存版本历史
  • 关系:修改 → add → commit → 版本保存

❓ Q2: git reset --hard HEAD^ 和 git checkout -- file 有什么区别?

参考回答

命令作用范围是否影响历史
git reset --hard整个分支✅ 修改提交历史
git checkout -- file单个文件❌ 不影响历史

📌 总结:

  • reset 是“版本回退”
  • checkout -- file 是“文件撤销”

❓ Q3: 为什么 Git 用 SHA-1 而不用自增 ID?

参考回答

  1. 唯一性:SHA-1 哈希全局唯一,避免多人协作冲突
  2. 数据完整性:哈希值可验证内容是否被篡改
  3. 分布式:无需中心服务器分配 ID,适合分布式系统

💡 加分项:
虽然 SHA-1 已被破解,但 Git 的使用方式使其在版本控制场景下仍安全。


❓ Q4: git diff 和 git diff --staged 有什么区别?

参考回答

  • git diff:比较工作区暂存区
  • git diff --staged:比较暂存区本地仓库

📌 类比:

  • diff:还没 add 的修改
  • diff --staged:已 add 但没 commit 的修改

❓ Q5: 如何恢复一个被 git reset --hard 删除的提交?

参考回答

  1. 使用 git reflog 查看所有操作记录
  2. 找到被删除提交的哈希 ID
  3. 使用 git reset --hard <commit-id> 恢复

🎯 核心:reflog 是 Git 的“操作日志”,是最后的救命稻草。


✅ 九、总结:Git 核心心法

操作命令关键点
查看状态git status操作前必用
添加修改git add .进入暂存区
提交版本git commit -m ""写好提交信息
查看差异git diff提交前确认
回退版本git reset --hard慎用 --hard
撤销修改git checkout -- file丢弃工作区修改
查看历史git log --oneline快速浏览
查看操作git reflog“后悔药”

🌟 记住口诀
"先 add,再 commit;重大操作先 diff;版本回退靠 reset;撤销修改用 checkout;历史查看 log,操作记录 reflog。"


🚀 下一步

  • ✅ 实践:创建一个测试项目,尝试添加、提交、回退
  • ✅ 错误演练:故意删除提交,用 reflog 恢复
  • ✅ 进阶:学习分支管理(git branchgit merge

💡 Git 不是工具,而是思维方式
掌握它,你将拥有“代码时光机”! ⏳