你是否曾遇到过这样的场景?
改完代码后发现不如原来好,却再也找不回旧版本;
团队协作时,同事的修改覆盖了你的工作,最后谁也说不清哪一版才是对的;
上线前突然发现一个致命 Bug,却不知道是从哪次提交开始出的问题......
这些问题,其实都有一个优雅的解决方案------Git。
Git 不是一个神秘的黑箱,它更像是一位沉默的记录者,默默守护着你代码的每一次呼吸与成长。它赋予我们"时光倒流"的能力,让我们在创新时无所畏惧:因为无论走多远,只要一句命令,就能回到最初的模样。
本文将带你从零开始,亲手搭建一个完整的 Git 工作流:从初始化本地仓库,到通过 SSH 安全连接远程仓库,再到熟练使用 status、add、commit、diff、reset 等核心命令,真正理解它们背后的逻辑与价值。
一、初始化本地仓库
假设你有一个名为 lesson_zp 的项目文件夹,目前还没有版本控制能力。
bash
cd lesson_zp
git init
✅
git init:初始化一个本地 Git 仓库,在当前目录下生成一个.git隐藏目录,用于存储版本信息。
通常使用 git init 命令后会输出类似以下内容
sql
Initialized empty Git repository in /your/current/directory/lesson_zp/.git/
此时初始化成功,这个项目就具备了版本管理的能力。
二、配置 Git 用户信息
首次使用 Git 需要设置用户名和邮箱:
arduino
git config --global user.name "用户名"
git config --global user.email "邮箱"
✅
git config --global:全局配置命令,设置提交时显示的作者信息。
三、关联远程仓库(使用 SSH)
我们使用 Gitee(码云) 作为远程仓库托管平台。
1. 生成 SSH 密钥(如未生成过)
arduino
ssh-keygen -t rsa -C "邮箱"
然后在终端使用命令 (~/.ssh/id_rsa.pub) 将显示的公钥内容添加到 Gitee 账户的 SSH Keys 中。
2. 关联远程仓库
scss
git remote add origin git@gitee.com:giaoZou/lesson_zp.git
✅
git remote add origin [URL]:将本地仓库与远程仓库建立连接,命名为origin。
此处使用的URL为远程仓库提供的SSH的URL,不要错用了HTTP的URL
四、推送首次提交到远程仓库
sql
git add .
git commit -m "第一次添加"
git push -u origin master
✅
git add .:将所有更改的文件添加到暂存区(stage)。✅
git commit -m "描述":将暂存区的内容提交到本地仓库,并附上提交说明。✅
git push -u origin master:推送到远程仓库的master分支,并设置上游分支(后续可直接用git push)。
五、常用 Git 命令实战练习
接下来我们在项目中进行一些修改,并练习关键命令。
首先在桌面先建一个文件夹,命名为learn_git
1. 在learn_git文件夹中添加并修改 readme.txt
swift
//readme.txt
Git is a distributed version control system.
Git is free software.
查看状态
lua
git status
✅
git status:查看当前仓库状态。
运行 ****git status 显示以下内容

显示 readme.txt 是"Untracked files"未跟踪的文件,表示它尚未被纳入版本控制。
添加到暂存区
csharp
git add readme.txt
git add .
✅
git add [file]:将指定文件添加到暂存区,准备提交。✅
git add .:将文件夹内所有文件添加到暂存区
运行 ****git add readme.txt 后再运行 ****git status 会发现 readme.txt 已处于"Change to be committed"已暂存状态。

提交到本地仓库
sql
git commit -m 'message'
✅
git commit -m 'message':将暂存区的变更永久保存为一个新版本。每次提交都有唯一 ID(SHA-1 哈希值),避免多人协作时 ID 冲突。
运行git commit -m 'wrote a readme file' 后再次运行git status

此时暂存区 "nothing to commit, working tree clean" 无文件需要提交
小练习
添加三个文件 file1.txt - file3.txt
使用命令 git add file1.txt file2.txt file2.txt 后再次运行 git status

使用 git commit -m 'add 3 files.'

2. 修改文件后查看差异
编辑 readme.txt,将第一句修改为:
swift
Git is a distributed version control system.
查看修改内容
git diff
✅
git diff:显示工作区与暂存区之间的差异。在提交前使用此命令,确认修改是否正确,是个好习惯。
运行 git diff readme.txt

红色一行表示删减,绿色一行表示添加
提交第二次修改
sql
git add readme.txt
git commit -m "add distributed"

六、版本回退与历史查看
Git 的强大之处在于它可以像"月光宝盒"一样带你穿越时空。
1. 查看提交历史
lua
git log
git log --oneline
✅
git log:显示完整的提交历史。✅
git log --oneline:简化输出,每条提交只显示一行(哈希值 + 提交信息)。
在经过一些修改和提交后我们可以使用该命令进行查看我们的修改日志

或使用更简洁的git log --oneline

其中 HEAD -> master 表示当前所在分支和最新提交。
2. 版本回退
回退到上一个版本
css
git reset --hard HEAD^
✅
git reset --gard HEAD^
HEAD^表示当前提交的父提交(前一个版本)。
HEAD^2表示前两个版本,以此类推。
运行 git reset --hard HEAD^ 如图
编辑
执行后,代码自动恢复至上一版本,文件内容也会同步变化。
回退到指定版本
css
git reset --hard 1a83b75
✅例如:
git reset --hard 1a83b75使用提交的 SHA 哈希值直接跳转到任意历史版本。
在运行 git log --oneline 后,每行日志的开头都有SHA哈希值,可通过该值直接跳转到对应版本

运行如图

3. 查看操作历史
git reflog
✅
git reflog:记录你对HEAD的所有操作(包括回退、切换等)。即使版本回退后想找回"丢失"的提交,也能通过此命令找到哈希值并恢复。
运行如图

七、撤销修改的两种方式
1. 撤销工作区修改
lua
git checkout -- readme.txt
✅ 将工作区的
readme.txt恢复到最后一次提交的状态,丢弃所有未提交的修改。
⚠️ 注意:此操作不可逆,请谨慎使用!
2. 撤销暂存区添加
perl
git reset HEAD readme.txt
✅ 将已添加到暂存区的文件移出暂存区,但保留工作区的修改。
之后若想彻底撤销,再执行:
lua
git checkout -- readme.txt
常用命令速查表
| 命令 | 作用 |
|---|---|
git init |
初始化本地仓库 |
git config --global user.name/email |
设置用户信息 |
git remote add origin [url] |
关联远程仓库 |
git add [file] |
将文件添加到暂存区 |
git commit -m "msg" |
提交更改到本地仓库 |
git status |
查看仓库当前状态 |
git diff |
查看工作区与暂存区的差异 |
git log / git log --oneline |
查看提交历史 |
git reset --hard HEAD^ |
回退到上一个版本 |
git reset --hard [commit-id] |
回退到指定版本 |
git reflog |
查看 HEAD 操作记录(找回丢失的提交) |
git reset HEAD [file] |
取消暂存文件 |
git checkout -- [file] |
撤销工作区的修改 |
结语:掌握 Git,就是掌握开发的节奏
学习 Git 的过程,就像学会骑自行车------起初手忙脚乱,生怕摔倒;但一旦掌握平衡,你就会发现,它能带你去更远的地方。
我们常常以为编程只是写代码,但实际上,管理变化才是开发的核心。而 Git,正是管理变化的艺术。
当你能从容地查看历史、对比差异、回退版本、撤销误操作时,你就不再只是代码的编写者,而是它的掌舵人。你不再害怕尝试,因为你有"后悔药";你不再焦虑协作,因为每个人都有自己的分支航线。
愿你在未来的每一个项目中,都能熟练地敲下那句 git commit -m "fix something important",然后微微一笑------因为你清楚,无论前方是风浪还是星辰,Git 都在为你护航。
现在,是时候让你的代码也拥有"记忆"了。
记住:多用
git status,勤写提交信息,善用git diff,你的 Git 之路会越走越稳。