以前觉得 Git 就是"上传代码的工具",
后来才发现,它其实是给文件装了个"时光机"。
一、为什么需要 Git?
刚开始写代码的时候,我都是直接在一个文件夹里存项目。
今天改一点,明天改一点,过几天想找回之前的版本------翻不到了。
更别提多人协作:我把改好的文件发给同事,他再改完发回来,几次之后,谁是谁的都分不清。
后来才知道,有个东西叫 版本控制,而 Git 是其中最流行的一个。
1.1 从"单机版"到"分布式"
中央仓库 vs 本地仓库。
- 中央仓库(remote) :放在 GitHub、Gitee、GitLab 上,相当于一个"公共服务器",大家都从上面拉代码、推代码。
- 本地仓库(local) :你电脑上的项目目录,经过 Git 初始化后,就变成了一个"带版本控制能力的本地仓库"。
Git 是 分布式 的,意思是每个人的电脑上都有一个完整的仓库副本。
不像以前那种"中央服务器挂了所有人都完蛋"的老系统,Git 即使断网也能在本地做版本管理,等有网了再同步。
另外,Git 还能帮你解决两个痛点:
- 文件损坏或误删 :Git 会为每一次提交保存一个 快照,相当于给文件拍了张照片。随时可以回到以前的某个状态。
- 工程化管理:多人并行开发、分支管理、合并代码......这些东西让项目变得可控。
二、初始化:git init
要把一个普通文件夹变成 Git 仓库,只需要在终端里进入这个目录,输入:
bash
csharp
git init
执行完,当前目录下会多出一个 .git 文件夹(隐藏的)。
这个文件夹里存着所有的版本信息、配置、日志。不要乱改里面的东西,Git 自己会维护它。
一个小发现:Windows 和 Linux 的 shell 脚本不太一样,所以 Git 专门提供了一个 Git Bash------它模拟了一个最简版的 Linux 环境,让你在 Windows 上也能用同样的命令。
初始化之后,可以用 ls -all 看看有没有 .git 文件夹,有就说明成功了。
三、添加文件到仓库:git add
假设我有一个 readme.md 文件想交给 Git 管理。
第一步是:
bash
csharp
git add readme.md
这个命令把文件放到了一个叫 暂存区(stage) 的地方。
暂存区可以理解成一个"待办区"或"购物车"------你先把要提交的东西放进去,最后统一结账(commit)。
笔记里提到一个细节:
执行 git add 后,终端会显示类似 2 insertions 的信息,表示新增了两行内容。
Git 对每一行改动都很严谨,方便你随时知道改了啥。
四、提交到仓库:git commit -m "描述"
文件放到暂存区后,还没真正入库。
需要执行:
bash
sql
git commit -m "这里写你的说明"
-m后面跟的是这次提交的 描述信息 。
这个描述不能乱写,因为团队里的 leader 主要看这个来理解你改了啥。
好的描述比如:"修复登录页面的按钮样式 bug",而不是"改了点东西"。
执行完 commit,文件才真正被存进仓库,成为一个 版本(快照)。
五、为什么要分 add 和 commit 两步?
刚接触时我很困惑:为什么不一步到位?
后来发现,分两步其实很实用。
假设你完成了一个功能,修改了三个文件:index.html、common.css、common.js。
你可以:
bash
sql
git add index.html
git add common.css
git add common.js
git commit -m "完成了首页的布局功能"
这样做的好处:
- 灵活 :你可以分多次
add,比如先加两个文件,发现还有问题,先不改第三个。 - 安全 :在
commit之前,如果你反悔了,可以用git restore --staged <文件名>把文件从暂存区撤回来,避免提交错误的代码。 - 原子性 :一次
commit对应一个完整的任务(比如"完成首页功能"),而不是每个文件一个零散的版本。
所以,add 是"挑选要打包的东西",commit 是"正式封箱并写上标签"。
六、随时查看状态:git status
这是最常用的命令之一。
任何时候想确认当前仓库的状态,就输入:
bash
lua
git status
它会告诉你:
- 哪些文件是 untracked(未跟踪,Git 从未见过它们)
- 哪些文件被修改了但还没
add - 哪些文件已经在暂存区,to be committed(待提交)
有一句很实在的话:
任何关键时刻,先 git status。
比如你准备 commit 之前,看一眼有没有多加了不该加的文件;或者拉取别人代码之前,看一下自己有没有未提交的改动。
目标是 保持仓库干净------也就是没有未提交的改动,没有冲突,一切清晰。
七、文件的状态变化
我用一个简单的流程来总结文件的状态变化:
- 新建文件 → 状态:
untracked(Git 不认识它) git add→ 状态变为staged(进了暂存区,待提交)git commit→ 状态变为committed(已存入仓库,成为历史版本)- 修改已提交的文件 → 状态变为
modified(需要重新 add + commit)
你可以随时用 git status 查看当前文件处于哪个阶段。
八、把代码放到 Gitee 上:从"本地时光机"到"云端共享"
本地 Git 仓库已经很好了,能记录版本、随时回滚。
但它还是只在我自己的电脑上。如果我想:
- 和别人一起写代码
- 换一台电脑继续写
- 给领导或同事看一眼进度
就需要一个 远程仓库。国内常用的有 Gitee(码云),GitHub 有时候访问不太稳。
8.1 先在 Gitee 上建一个空仓库
- 登录 Gitee(没有账号的话注册一个,挺快的)
- 点击右上角的"+" → "新建仓库"
- 填写仓库名称,比如
my-first-project - 其他选项可以先默认:私有/公开看自己,不要勾选"使用 Readme 文件初始化" (因为我们本地已经有代码了)
- 点击"创建"
创建完后,Gitee 会给你一个仓库地址,长得像这样:

text
bash
https://gitee.com/你的用户名/my-first-project.git
复制这个地址,待会儿要用。
8.2 告诉 Git 你是谁(很重要)
在第一次提交之前,Git 需要知道你的名字和邮箱。
这不是用来登录的,而是 记录每一次提交是谁做的。这样团队里其他人看到历史记录,就知道某行代码是你写的,方便沟通。
打开终端(Git Bash),输入:
arduino
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
比如:
bash
arduino
git config --global user.name "zhangwei"
git config --global user.email "zhangwei@example.com"
--global 表示全局生效,也就是说这台电脑上所有的 Git 仓库都会用这个用户名和邮箱。
如果你某个项目想用另一个身份(比如工作项目用公司邮箱),可以去掉 --global,在那个项目里单独配置。
小提醒:这个邮箱建议和 Gitee 账号绑定的邮箱保持一致,这样 Gitee 仓库页面上能把提交记录关联到你的头像和主页。
配置完之后可以检查一下:
bash
css
git config --global --list
看到 user.name 和 user.email 就说明好了。
8.3 把本地仓库和远程仓库连起来
回到你的项目目录(已经执行过 git init 的那个),输入:
bash
bash
git remote add origin https://gitee.com/你的用户名/my-first-project.git
这条命令的意思是:给本地仓库添加一个远程地址,名字叫 origin (origin 是 Git 默认的远程名,你也可以改成别的,但大家都用这个)。
如果不确定有没有加成功,可以看一下:
bash
git remote -v
它会显示当前关联的远程仓库地址。
8.4 把本地代码推送到 Gitee
现在本地已经有了提交(比如你之前 commit 过),可以推上去了:
bash
perl
git push -u origin master
或者如果你的默认分支叫 main(git branch查看,Git 新版本有时候会用 main),就改成:
bash
css
git push -u origin main
-u是--set-upstream的缩写,它会记住本地分支和远程分支的对应关系。之后你再git push就可以直接敲,不用每次写origin master。- 第一次推送可能会要求你输入 Gitee 的用户名和密码(或者用 token,现在 Gitee 推荐用私人令牌)。
小插曲:我第一次推的时候,一直提示权限错误,后来发现 Gitee 从 2022 年起就不能用密码直接 push 了,要去"设置"→"私人令牌"生成一个 token,然后密码那里填 token。踩过一次坑就记住了。
推送成功后,刷新 Gitee 仓库页面,就能看到你的代码了。
8.5 之后日常怎么用?
- 本地改了代码 →
git add→git commit→git push - 换一台电脑想继续写 →
git clone https://gitee.com/你的用户名/仓库名.git - 如果和别人协作,别人推送了新代码 →
git pull拉下来
这时候 Git 就从"我自己的时光机"变成了"团队共享的时光机"。
而且代码在 Gitee 的服务器上,就算我电脑坏了,也丢不了。
九、一点小感受
学 Git 之前,我觉得它就是一个"上传代码的麻烦工具"。
学了一点之后,才发现它更像是一个 时间旅行器 + 多人协作的桥梁。
git init给文件夹装上了"版本控制引擎"git add把选中的改动放进购物车git commit给购物车结账并贴上标签git status让我随时知道自己在哪
这些命令一旦熟悉了,反而觉得很自然。
而且它们几乎是所有 Git 工作流的基础------不管是 GitHub、GitLab 还是公司内部的 Git 服务,都离不开这一套。
如果你也是 Git 初学者,不妨试试在一个小项目里练一练:初始化、加文件、提交、改内容、再看看状态。
踩几次坑之后,很快就习惯了。