零基础学git
Git—版本管理系统。有很多同学觉得git很难学。我想到一个好办法,成为它,然后理解它。我们先不学 Git,我们设计 Git。
一、为什么需要版本管理系统?
因为**“我想记录我做过什么,并随时回退。”**
真实的迭代不是线性上升,偶尔会“翻车”。所以我们需要:
-
随时拍照 → 保存某个时刻的代码状态(增加)
-
随时回看 → 分析某次修改后的影响(查看)
-
随时切换 → 尝试不同的解决路径(修改)
这,正是版本控制系统Git存在的理由。
二、如果你是 Git,你会怎么设计?
- 三个数据库
是的,这就是一个数据库,增删改查,保存的数据是代码快照。但是问题又来了,我的改动很多,但是我只想在这个数据库里保存一部分怎么办?或者突然想把保存的一部分删掉呢?
我们需要三个区域(也是三种数据库):
| 区域名称 | Git术语 | 功能说明 |
|---|---|---|
| 工作区 | Working Directory | 写代码的地方(实时状态) |
| 暂存区 | Staging Area | 暂时保存修改(打草稿),针对修改的粒子状态 |
| 本地仓库 | Local Repository | 正式保存版本(一次逻辑变更,Bug 修复、新功能、样式微调等)—>记录开发路线,进程 |
Git 本质上就是一个“快照调度系统”,你做的每一个动作,都是在管理这三块存储空间之间的数据流动。
补充知识:项目中的每个文件有四种状态: U—未进入暂存区 A—已进入暂存区 M—已进入暂存区,但有修改未进入暂存区 无标识—进入本地仓库
接下来我们进入命令行的世界:
## 暂存区的增删改查
# 1. 把所有改动加入“暂存区”
git add .
# 2. 只添加某个文件
git add src/index.js
# 3. 删除文件(从暂存区移除,同时工作区也会删)
git rm old_script.py
# 4. 查看暂存区文件
git ls-files
##本地仓库的增删改查
# 1. 提交暂存区到“本地仓库”(生成一个版本)
git commit -m "修复页面跳转逻辑bug"
# 2. 删除一个版本
git rebase -i <版本ID>
# 3. 查看所有版本提交记录(含历史)
git log --oneline
# 4. 查看本地仓库中所有引用过的版本变动记录(包括已reset的)
git reflog
# 5. 快速提交已跟踪的文件(跳过 add)
git commit -am "快速提交修改" # 不包含新文件!
# 6. 版本回退
git reset --hard HEAD^ #回退到上个版本
git reset --hard <版本ID> #回退到指定版本,
# 更新本地仓库版本快照--> 暂存区清空,快照内容替换暂存区 -->工作区清空,暂存区内容替换工作区
# 适用于当前版本全是问题,回退到之前稳定的版本
git reset --soft <版本ID>
# 更新本地仓库版本快照--> 暂存区内容不变 --> 工作区内容不变
# 适用于提交的动作发生失误,例如提交错了,重复提交
git reset --mix <版本ID>
# 更新本地仓库快照 --> 暂存区清空 --> 工作区内容不变
# 适用于想回退一次提交,还想重新选择要提交哪些改动的
- **多人协作之Git共享仓库
在任何大型项目中,多人协作是不可避免的。如何让多人的代码高效协作、版本不冲突?很自然地,我们会想到:把本地仓库同步到云服务器上。
这,就是 GitHub、Gitee、GitLab 存在的意义 —— 一个 Git 仓库的远程云端副本。
如何将本地的仓库同步到云服务器呢?我们分三步走:
| 步骤 | 类比 | 实际操作 |
|---|---|---|
| 第一步 | 找到云上的家 | 拿到 GitHub 仓库地址 |
| 第二步 | 建立一条路 | 用 git remote add 建立连接 |
| 第三步 | 把东西运过去 | 用 git push 上传 |
同样的,小伙伴从云服务器上获取云上仓库也需要这三步
| 步骤 | 类比 | 实际操作 |
|---|---|---|
| 第一步 | 找到云上的家 | 获取 GitHub 仓库地址 |
| 第二步 | 建立本地仓库 | git clone |
| 第三步 | 从云上搬下来 | Git 会自动下载 |
接下来,我们进入命令行的世界
**上传本地仓库
##获取url地址 -https://github.com/yourname/myproject.git
## 1. 自己先注册一个账号
## 2. 新建一个云上的仓库
## 3. 在仓库的<code>菜单下有仓库的地址
##本地建立连接(origin 是远程仓库的默认别名,可以自己定义)
git remote add origin https://github.com/yourname/myproject.git
##上传本地仓库(必须有commit版本)
git push -u origin master ## master分支(后面会讲分支的概念)
git push -u origin main ## main分支
**获取云端仓库
## 获取云端url地址 -https://github.com/yourname/myproject.git
##本地建立连接并下载
git clone https://github.com/yourname/myproject.git
- Git 分支管理:孤岛生存游戏
当我们解决了“如何共享仓库”的问题,新的挑战又来了:
怎样让每个人同时开发不同的功能、又不相互干扰?
这时,Git 的超级武器就登场了:分支系统(Branching)
为什么需要分支?
类比一下:一个公司正在开发一辆车,有人负责方向盘、有人负责引擎、有人负责车灯。如果大家都在同一个仓库里随便改,很容易相互踩脚。
Git 的策略是:
-
每个人都从主线复制一个自己的“开发分支”
-
分开搞,互不影响
-
最后成功后再“合并(merge)”到主分支中
这,就是“安全地同时干活”。
核心概念:
| 名称 | 含义 |
|---|---|
| branch | 分支,就是一个指向某个 commit 的指针 |
| HEAD | 当前你所在的分支(工作区)指针 |
| merge | 把别的分支合并到你当前的分支 |
| conflict | 两个分支改了同一行代码,Git 不知道听谁的,就冲突了 |
是的,分支就是这么的简单。
接下来我们进入命令行的世界
## 1. 查看所有分支,当前所在的会有 *
git branch
## 2. 创建新分支(不会自动切换过去)
git branch feature-login
## 3. 切换到新分支
git checkout feature-login
## 🆕 一步到位(创建并切换)
git checkout -b feature-login
## 4. 删除本地分支
git branch -d feature-login # 删除本地分支(安全删除)
git branch -D feature-login # 强制删除
## 5. 合并其他分支到当前分支(你必须先切换到目标分支)
git checkout main
git merge feature-login
## 6. 推送分支到远程仓库
git push origin feature-login
## 7. 拉取远程分支
git fetch
git checkout -b feature-login origin/feature-login
分支的最佳实践建议:
| 建议 | 理由 |
|---|---|
| 每个功能一个分支 | 便于回退、独立开发 |
| 不直接在 main 上开发 | 保持主分支稳定 |
| 合并前用 pull 更新主分支 | 避免冲突 |
- **回到起点
在前面的探索中,我们从“为什么需要版本控制”一直聊到“如何多人协作”,你已经从 Git 的思维模式出发,理解了它背后的核心逻辑。
现在,是时候回到起点:
真正让 Git 成为你的开发搭档,从“装在你脑子里”,变成“装进你的电脑里”。
第一步:下载 Git
请根据你的操作系统,选择官方版本:
-
Windows:https://git-scm.com/download/win
-
macOS:推荐用 Homebrew,终端输入:
brew install git
-
Linux (Debian/Ubuntu):
sudo apt update
sudo apt install git
第二步:配置 Git 身份信息
每次提交代码(commit)时,Git 都会打上“谁干的”这个标签。
## 设置用户名(请替换成你自己的英文名)
git config --global user.name "Your Name"
## 设置邮箱(必须和 GitHub/Gitee 等平台一致)
git config --global user.email "your@email.com"
第三步:检查是否配置成功
git config --global --list
你应该能看到类似以下输出:
user.name=Your Name
user.email=your@email.com
这表示你已经“实名入驻 Git 世界”。
第四步:开始你的第一次 Git 试飞
让我们创建一个测试项目并进行一次完整的“初始化-添加-提交”流程:
## 创建一个目录
mkdir git-test && cd git-test
## 初始化 Git 仓库(此刻你已拥有自己的版本数据库)
git init
## 新建一个测试文件
echo "# Hello Git" > README.md
## 添加文件到暂存区
git add README.md
## 提交到本地仓库
git commit -m "初始化项目,添加 README"
## 查看提交记录
git log
恭喜你,现在你已经真正从“Git 思想”走到了“Git 实操”。