Git 入门实战笔记:从 0 到 1 掌握代码版本管理流程

作为开发者,代码版本管理是日常工作的核心技能之一。最近我通过一个简单的项目,完整实践了 Git 从仓库初始化到版本回退、文件修改跟踪的全流程,整理了这份包含真实命令和场景的实战笔记,适合刚接触 Git 的新手参考。

一、基础认知:Git 仓库的核心原则

在开始操作前,有两个关键原则必须明确:

  1. 一个项目对应一个 Git 仓库:同一个项目目录下不能存在多个 Git 仓库,否则会导致版本跟踪混乱,所有代码应放在同一个仓库中统一管理。
  2. Git 跟踪的是 "版本变化" :无论是新建文件、修改内容还是删除文件,Git 都会记录每一次变更,通过唯一的哈希值区分不同版本,而非仅关注文件本身。
工作区名称 含义与作用 对应操作命令 状态标识(git status 显示)
工作区 本地可见的项目目录,用于日常编辑代码的地方,所有新增、修改、删除操作先在这里发生。 直接在文件夹中编辑 / 删除文件(无 Git 命令) 未跟踪(Untracked files)、已修改未暂存(modified
暂存区 临时存储待提交的变更,相当于 "待提交缓冲区",可选择性选择部分修改提交,而非全部。 git add <文件>(添加到暂存区)、git reset HEAD <文件>(从暂存区移除) 已暂存待提交(Changes to be committed
本地仓库 存储所有版本历史的核心区域(.git 隐藏目录),记录每次提交的完整快照,可回退到任意版本。 git commit -m "说明"(提交暂存区内容到仓库)、git log(查看历史) 无(提交后暂存区清空,工作区与仓库一致时显示 "clean")
远程仓库 网络上的共享仓库(如 GitHub/Gitee),用于多人协作同步代码,避免本地仓库丢失。 git push(推本地仓库推送到远程)、git pull(拉取远程更新到本地) 无(需通过 git remote 查看远程仓库配置)

核心工作区流转关系:

  1. 工作区 → 暂存区:通过 git add 将修改加入暂存区,准备提交。
  2. 暂存区 → 本地仓库:通过 git commit 将暂存区内容永久保存到版本历史。
  3. 本地仓库 ↔ 远程仓库:通过 git push/git pull 实现本地与远程的同步,支持多人协作。
概念 范围与含义 包含内容
版本库 广义上指所有存储版本信息的仓库,可分为 "本地版本库" 和 "远程版本库"。 所有提交的版本快照、分支、暂存区、配置等(核心是 .git 文件夹或远程服务器上的对应数据)。
  • 本地仓库是版本库的 "本地实例",包含在广义的 "版本库" 概念中。
  • 平时说的 "提交到本地仓库",其实就是 "将变更写入本地版本库的 .git 文件夹"。
  • 远程仓库则是版本库的 "网络实例",与本地仓库通过 git push/git pull 同步数据。

二、实战流程:从仓库初始化到版本管理

下面结合我在 learn_git 项目中的真实命令,拆解日常工作中 Git 的核心操作流程。

🏃‍1. 初始化仓库:开启版本跟踪

当我们新建一个项目后,第一步需要初始化 Git 仓库,让 Git 开始管理项目文件。

命令

bash 复制代码
git init

作用

  • 在项目目录下创建隐藏的 .git 文件夹(这是 Git 仓库的核心目录,存储所有版本信息)。
  • 默认创建 master 分支(部分新版本 Git 默认分支为 main,本质功能一致)。
  • 此时项目进入 "未跟踪" 状态,需要通过后续命令让 Git 关注具体文件。

🏃‍2. 文件新增:从 "未跟踪" 到 "版本记录"

工作中新建文件后,需要通过 git addgit commit 两步,将文件纳入 Git 版本跟踪。

步骤 1:添加文件到暂存区(git add)

新建 readme.txt 后,先通过

bash 复制代码
git status

了解当前仓库的状态

plaintext 复制代码
PS C:\Users\Desktop\learn_git> git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        readme.txt
        
状态标识(git status 显示) 含义说明 对应阶段 / 场景 常用操作建议
Untracked files(未跟踪文件) 文件是新创建的,Git 从未记录过它的版本(不在在暂存区、也不在本地仓库)。 新文件刚被创建,还未执行 git add 操作。 若需跟踪,执行 git add <文件名名> 加入暂存区;若无需跟踪,可加入 .gitignore 忽略。
Changes not staged for commit(已修改未暂存) 文件已被 Git 跟踪(之前提交过),但本次修改未加入暂存区(工作区有变更,暂存区未更新)。 对已跟踪文件做了修改,但未执行 git add 执行 git add <文件名> 将修改加入暂存区;若想丢弃修改,执行 git checkout -- <文件名>
Changes to be committed(已暂存待提交) 文件的修改已加入暂存区,等待被提交到本地仓库。 已执行 git add,但未执行 git commit 执行 git commit -m "说明" 提交到本地仓库;若想取消暂存,执行 git reset HEAD <文件名>

查看状态:发现 readme.txt 处于未跟踪状态,再用:

bash 复制代码
git add 文件名

将指定文件加入暂存区(暂存区是 Git 中 "待提交" 的过渡区域)。

plaintext 复制代码
# 将 readme.txt 加入暂存区
PS C:\Users\Desktop\learn_git> git add readme.txt

# 再次查看状态:文件已进入暂存区,等待提交
PS C:\Users\Desktop\learn_git> git status
On branch master
No commits yet
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   readme.txt

关键说明

  • git add 文件名:单个文件添加;若要添加所有新增 / 修改文件,可使用 git add .(注意:谨慎使用,避免误加无关文件)。
  • 暂存区的作用:允许我们选择性提交文件,比如同时修改了 A、B 两个文件,可先 git add A 提交 A 的变更,后续再处理 B。

步骤 2:提交到本地仓库(git commit)

暂存区确认无误后,用 git commit -m "提交说明" 将文件正式写入版本库,生成第一个版本。

命令

plaintext 复制代码
PS C:\Users\Desktop\learn_git> git commit -m 'wrote a readme file'
[master (root-commit) ae97af2] wrote a readme file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 readme.txt

输出解读

  • (root-commit):表示这是仓库的 "根提交",即第一次提交,初始化了版本历史。
  • ae97af2:提交的唯一哈希值(SHA-1 校验和),用于标识这个版本,后续回退或查看时会用到,相同文件名不同版本的哈希值不同。
  • create mode 100644 readme.txt:表示新建了一个权限为 644 的普通文件(100644 是 Linux 下的文件权限,对应 "所有者可读可写,其他用户只读",是代码文件的常见权限)。
  • 0 insertions(+), 0 deletions(-):此时 readme.txt 是空文件,没有新增或删除内容。

🏃‍3. 文件修改:跟踪内容变更

工作中最常见的场景是修改已有文件,比如给 readme.txt 添加内容,此时需要重新执行 "修改 → add → commit" 的流程。

步骤 1:修改文件并查看差异(git diff)

先编辑 readme.txt(比如添加 "Git is a version control system." 和 "Git is free software." 两行),再用 git diff 查看具体修改内容。

命令

plaintext 复制代码
# 查看 readme.txt 的修改差异
PS C:\Users\Desktop\learn_git> git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 89c45ce..0b6120c 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system. 
 Git is free software.
\ No newline at end of file

作用

  • git diff <文件名> 会显示文件修改前后的对比:- 表示删除的内容,+ 表示新增的内容,帮助我们确认修改是否正确,避免提交错误代码。

步骤 2:提交修改(git add + git commit)

确认修改无误后,提交到版本库:

命令

plaintext 复制代码
# 添加修改后的文件到暂存区
PS C:\Users\Desktop\learn_git> git add readme.txt

# 提交修改
PS C:\Users\Desktop\learn_git> git commit -m 'wrote a readme file'
[master a253f5a] wrote a readme file
 1 file changed, 2 insertions(+)

关键变化

  • 没有 create mode 信息:因为 readme.txt 已存在,这次是 "修改" 而非 "新建",所以 Git 只显示变更行数。
  • 新的哈希值 a253f5a:即使修改的是同一个文件,只要内容或提交时间有变化,哈希值就会不同(Git 哈希值由提交内容、作者、时间、父提交哈希等信息计算得出,确保每个版本唯一)。

🏃‍4. 多文件批量管理:一次性提交多个新增文件

实际项目中常需要同时新增多个文件(比如 file1.txtfile2.txtfile3.txt),可批量添加并提交。

命令

plaintext 复制代码
# 分别添加3个文件到暂存区(也可直接用 git add . 批量添加)
PS C:\Users\Desktop\learn_git> git add file1.txt
PS C:\Users\Desktop\learn_git> git add file2.txt
PS C:\Users\Desktop\learn_git> git add file3.txt


# 或者 PS C:\Users\Desktop\learn_git> git add file1.txt file2.txt file3.txt

# 一次性提交3个文件
PS C:\Users\Desktop\learn_git> git commit -m 'add 3 file.'
[master e88ce65] add 3 file.
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1.txt
 create mode 100644 file2.txt
 create mode 100644 file3.txt

注意事项

  • git add . 会添加当前目录下所有未跟踪 / 修改的文件,适合批量操作,但要提前通过 git status 确认,避免误加日志、缓存等无关文件(可通过 .gitignore 文件排除不需要跟踪的文件)。

🏃‍5. 版本回退:回到历史版本

当代码出现问题(比如提交了错误内容),需要回退到之前的稳定版本时,可通过 git reset 实现。

步骤 1:查看版本历史(git log)

先通过 git loggit log --oneline 查看所有版本的哈希值和提交说明:

命令

plaintext 复制代码
# 简洁查看版本历史(--oneline 表示一行显示一个版本)
PS C:\Users\Desktop\learn_git> git log --oneline
6376260 (HEAD -> master) append GPL  # 当前版本
b1cb682 add distributed
e88ce65 add 3 file.
a253f5a wrote a readme file
ae97af2 wrote a readme file

说明

  • HEAD -> master:表示当前处于 master 分支的 6376260 版本。
  • git log 进入分页模式,按 q 键退出。

步骤 2:回退到指定版本(git reset --hard)

比如要回退到 "add distributed" 版本(哈希值 b1cb682):

命令

plaintext 复制代码
# 回退到上一个版本(HEAD^ 表示当前版本的上一个版本,^ 越多回退越远)
PS C:\Users\Desktop\learn_git> git reset --hard HEAD^
HEAD is now at b1cb682 add distributed

# 也可直接通过哈希值回退到任意版本(比如回退到最早的"add 3 file."版本)
PS C:\Users\Desktop\learn_git> git reset --hard e88ce65
HEAD is now at e88ce65 add 3 file.

关键提醒

  • git reset --hard 是 "硬回退",会直接覆盖工作区的文件,若有未提交的修改会丢失,使用前务必确认已保存重要内容。
  • 若回退后想恢复到新版本,可通过 git reflog 查看所有操作记录,找到新版本的哈希值再回退:
plaintext 复制代码
PS C:\Users\Desktop\learn_git> git reflog
6376260 (HEAD -> master) HEAD@{0}: reset: moving to 6376260
a253f5a HEAD@{1}: reset: moving to HEAD^
# 找到目标版本的哈希值 6376260,执行 git reset --hard 6376260 即可恢复

🏃‍6. 文件撤销:丢弃不需要的修改

若修改了文件但不想提交(比如误改了内容),可通过 git checkout -- <文件名> 丢弃工作区的修改,恢复到最近一次提交的状态。

命令

plaintext 复制代码
# 假设修改了 readme.txt 但不想保留,执行以下命令撤销
PS C:\Users\Desktop\learn_git> git checkout -- readme.txt

注意事项

  • 命令中的 -- 不可省略,否则 Git 会误以为你要切换分支。
  • 若文件已加入暂存区(执行过 git add),需先通过 git reset HEAD <文件名> 撤销暂存,再执行 git checkout
plaintext 复制代码
# 撤销暂存区的修改
PS C:\Users\Desktop\learn_git> git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

# 再丢弃工作区的修改
PS C:\Users\Desktop\learn_git> git checkout -- readme.txt

🏃‍7. 文件删除:从版本库中移除文件

若需要删除项目中的文件(比如无用的 file1.txt),需同时删除工作区文件和版本库记录,避免 Git 提示 "文件缺失"。

场景 1:彻底删除文件(工作区 + 版本库同时移除)

如果文件确实无用,需要从项目中完全删除(包括本地文件和版本库记录):

  1. 删除文件并同步到版本库 使用 git rm 命令,一次性删除工作区文件并将 "删除操作" 加入暂存区:

    bash 复制代码
    git rm <文件名>  # 例如:git rm file1.txt
  2. 提交删除记录到版本库 执行 git commit 确认删除,版本库会记录这次删除操作:

    bash 复制代码
    git commit -m "删除无用的file1.txt"

    效果:工作区的文件被删除,版本库中该文件的历史记录保留,但当前版本不再包含该文件。

场景 2:仅从版本库移除,保留工作区文件(取消跟踪)

如果文件需要留在本地(如配置文件),但不想让 Git 继续跟踪它(从版本库中 "移除跟踪"):

  1. 取消版本库跟踪,但保留本地文件 使用 git rm --cached 命令,仅从版本库和暂存区移除,工作区文件不变:

    bash 复制代码
    git rm --cached <文件名>  # 例如:git rm --cached file1.txt
  2. 提交变更到版本库确认取消跟踪的操作:

    bash 复制代码
    git commit -m "停止跟踪config.ini(本地保留)"

    后续建议 :将该文件加入 .gitignore,避免后续误操作重新添加到版本库:

    bash 复制代码
    echo "config.ini" >> .gitignore  # 新增到忽略列表

这两个场景执行下又想回到原先的一步可以常考上面的几个步骤

说明

  • git rm 本质是 "删除文件 + git add(提交删除操作到暂存区)" 的组合命令,一步到位。
  • 执行后可通过 git status 查看状态:删除操作会显示在 Changes to be committed 中,确认后提交即可。
  • 若删除后想恢复,可通过版本回退(git reset --hard <版本号>)找回历史版本中的文件(前提是该文件曾被提交过)。

三、总结:Git 日常工作流核心公式

通过以上实战,可总结出 Git 版本管理的核心流程,适用于 90% 以上的日常开发场景:

  1. 新增 / 修改文件:在工作区编辑代码。
  2. 确认差异git diff <文件名> 检查修改内容。
  3. 暂存文件git add <文件名>git add . 将文件加入暂存区。
  4. 提交版本git commit -m "清晰的提交说明" 写入版本库(提交说明要简洁明了,比如 "修复登录按钮点击无响应问题",方便后续追溯)。
  5. 版本管理 :通过 git log 查看历史、git reset 回退版本、git checkout -- 撤销修改。

掌握这些基础操作,就能应对大部分个人项目和团队协作中的版本管理需求。后续可进一步学习分支管理、远程仓库(GitHub/Gitee)协作等进阶内容,让 Git 真正成为开发效率的 "助推器"。

Git官方文档

相关推荐
白水清风3 小时前
Vue3之渲染器
前端·vue.js·面试
白水清风3 小时前
Vue3之组件化
前端·vue.js·面试
白水清风3 小时前
Vue3之响应式系统
vue.js·面试·前端工程化
农夫山泉的小黑4 小时前
【DeepSeek帮我准备前端面试100问】(十八)Reflect在vue3的使用
前端·面试
Achieve前端实验室4 小时前
【每日一面】手写防抖函数
前端·面试·node.js
Tech有道4 小时前
字节跳动面试:Redis 数据结构有哪些?分别怎么实现的?
后端·面试
Tech有道5 小时前
滴滴面试题:一道“轮询算法”的面试题,让我意识到自己太天真了
后端·面试
麦克马5 小时前
Git 日常
git
孤廖6 小时前
面试官问 Linux 编译调试?gcc 编译流程 + gdb 断点调试 + git 版本控制,连 Makefile 都标好了
linux·服务器·c++·人工智能·git·算法·github