Git 创仓入门:从零开始掌握版本控制核心技能

0 阅读5分钟

在现代软件开发中,Git 已成为开发者必备的基础设施。无论是个人项目还是大型团队协作,Git 都能帮你高效管理代码历史、追踪变更、协同开发。本文将基于你提供的笔记,系统讲解 如何正确初始化 Git 仓库(创仓) ,并掌握 git statusaddcommitdiff、版本回退等核心操作,助你迈出版本控制的第一步。


一、为什么一个项目只能有一个 Git 仓库?

✅ 同一个项目目录下,不应存在多个 .git 仓库。

Git 通过在项目根目录创建一个隐藏文件夹 .git 来管理整个项目的版本历史。如果你在一个已有 Git 仓库的目录下再次运行 git init,会覆盖或嵌套仓库,导致状态混乱、提交记录错乱。

正确做法

  • 每个项目独立一个目录;
  • 在项目根目录执行一次 git init
  • 所有源代码、文档都放在该目录下统一管理。

🌰 例如:你的项目结构应为

my-project/ 
├── .git/ ← 仓库元数据(自动生成) 
├── src/ ← 源代码 
├── README.md ← 文档 
└── package.json ← 配置文件

二、初始化仓库:git init

当你开始一个新项目时,第一步是将其纳入 Git 管理:

# 进入项目目录 
cd my-project 

# 初始化 Git 仓库 
git init

执行后:

  • Git 会在当前目录创建 .git 隐藏文件夹;
  • 自动创建默认分支(旧版为 master,新版多为 main);
  • 此时仓库是“空”的——没有任何文件被跟踪。

💡 提示:.git 目录包含所有提交历史、分支信息、配置等,切勿手动修改


三、理解 Git 的三大区域

Git 的工作流程围绕三个核心区域展开:

区域说明
工作区(Working Directory)你正在编辑的文件(如 VS Code 中打开的代码)
暂存区(Staging Area)用 git add 挑选要提交的变更
仓库(Repository)用 git commit 将暂存区内容永久保存为版本

🔄 流程:工作区 → git add → 暂存区 → git commit → 仓库


四、查看状态:git status —— 你的导航仪

在任何操作前,务必先运行 git status

git status

它会清晰告诉你:

  • 哪些文件是 未跟踪的(Untracked)
  • 哪些文件已修改但 未暂存(Changes not staged)
  • 哪些文件已 加入暂存区(Changes to be committed)

✅ 示例输出:

On branch master
Untracked files: 
(use "git add <file>..." to include in what will be committed)
      README.md 
      
nothing added to commit but untracked files present

这表示 README.md 是新文件,尚未被 Git 跟踪。


五、添加与提交:git add + git commit

1. 将文件加入暂存区

git add README.md # 或添加所有文件 
git add .

此时 git status 会显示:

Changes to be committed: 
new file: README.md

2. 提交到仓库

git commit -m "Add project README"

📝 提交信息规范:

  • 用动词开头(Add / Fix / Update / Remove);
  • 简洁描述变更内容;
  • 避免模糊词汇如 “update”、“fix bug”。

3. 提交的本质

  • Git 并不存储“完整文件”,而是存储文件的差异(delta)
  • 每次提交生成一个 唯一 SHA-1 哈希 ID(如 6eb466a),而非自增数字;
  • 为什么用哈希?
    → 支持分布式协作(无中心服务器也能保证唯一性)
    → 防篡改(任何修改都会改变哈希值)

六、查看差异:git diff —— 提交前的质量检查

在 git add 前,用 git diff 查看工作区与仓库的差异:

git diff

输出类似:

diff --git a/README.md
b/README.md 
index e69de29..d00491f 100644 
--- a/README.md 
+++ b/README.md 
@@ -0,0 +1 @@
+# My First Project

✅ 好习惯:重大提交前先 git diff,确认只包含预期变更。

若已 add 到暂存区,想看暂存区 vs 仓库的差异:

git diff --cached

七、撤销与回退:安全网机制

场景 1:撤销工作区的修改

# 丢弃 readme.txt 的所有本地修改 
git checkout HEAD -- readme.txt

⚠️ 此操作不可逆!确保你不需要这些更改。

场景 2:取消暂存(从暂存区移回工作区)

此时文件仍在工作区,可重新编辑或选择性添加。

# 将 readme.txt 从暂存区撤回
git reset HEAD readme.txt

场景 3:版本回退(慎用!)

# 回退到上一个版本 
git reset --hard HEAD^ 

# 回退到指定版本(替换为实际 commit ID)
git reset --hard 6eb466a

🔒 注意:--hard 会永久删除后续提交和修改,仅用于本地未推送的提交。


八、理解 HEAD 与提交历史

  • HEAD 是一个指针,始终指向当前分支的最新提交
  • 每次 commit,HEAD 会向前移动;
  • 你可以通过 git log 查看历史:
git log --oneline 
# 输出: 
# 6eb466a (HEAD -> master) add distribute
# a1b2c3d first commit

通过移动 HEAD(如 resetcheckout),你可以“穿越”到任意历史版本。


九、最佳实践总结

操作命令建议
初始化git init项目根目录执行一次
查看状态git status每次操作前必做
添加文件git add file按功能分批添加
提交变更git commit -m "msg"信息清晰、原子化
检查差异git diff提交前质量保证
撤销修改git checkout HEAD -- file仅限未暂存文件
取消暂存git reset HEAD file安全退回暂存区
版本回退git reset --hard 仅限本地未推送提交

十、结语:Git 是你的代码时光机

掌握 git init 到 commit 的完整流程,是你迈向专业开发的第一步。Git 不仅是一个工具,更是一种工程思维——它教会你:

  • 如何结构化地管理变更;
  • 如何为代码编写清晰的历史注释;
  • 如何在出错时安全回滚。

记住:频繁提交、小步快跑、信息明确,是使用 Git 的黄金法则。

现在,打开你的终端,创建第一个仓库吧!