学习笔记

零基础学git

#Git #版本控制

Git—版本管理系统。有很多同学觉得git很难学。我想到一个好办法,成为它,然后理解它。我们先不学 Git,我们设计 Git。

一、为什么需要版本管理系统?

因为**“我想记录我做过什么,并随时回退。”**

真实的迭代不是线性上升,偶尔会“翻车”。所以我们需要:

  • 随时拍照 → 保存某个时刻的代码状态(增加)

  • 随时回看 → 分析某次修改后的影响(查看)

  • 随时切换 → 尝试不同的解决路径(修改)

这,正是版本控制系统Git存在的理由。

二、如果你是 Git,你会怎么设计?

  1. 三个数据库

是的,这就是一个数据库,增删改查,保存的数据是代码快照。但是问题又来了,我的改动很多,但是我只想在这个数据库里保存一部分怎么办?或者突然想把保存的一部分删掉呢?

我们需要三个区域(也是三种数据库):

区域名称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>
# 更新本地仓库快照 --> 暂存区清空 --> 工作区内容不变
# 适用于想回退一次提交,还想重新选择要提交哪些改动的

  1. **多人协作之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

  1. 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 更新主分支避免冲突
  1. **回到起点

在前面的探索中,我们从“为什么需要版本控制”一直聊到“如何多人协作”,你已经从 Git 的思维模式出发,理解了它背后的核心逻辑。

现在,是时候回到起点

真正让 Git 成为你的开发搭档,从“装在你脑子里”,变成“装进你的电脑里”。

第一步:下载 Git

请根据你的操作系统,选择官方版本:

brew install git
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 实操”。