Git 是目前最主流的分布式版本控制系统,几乎是程序员的必备技能。本文从 Git 基础概念、本地操作、版本回退、分支管理到远程仓库和多人协作,系统梳理 Git 的核心用法,适合 Git 初学者快速入门。
一、Git 基础配置
首次使用 Git,需要配置用户名和邮箱(用于标识提交者):
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
查看当前 Git 配置:
git config --list
--global表示全局配置,对当前用户下的所有 Git 仓库生效。
二、Git 的三个核心区域
Git 中最重要的概念之一是 三个区域:
- 工作区(Working Directory)
- 暂存区(Stage / Index)
- 版本库(Repository)
常用命令
git add 文件名 # 将文件加入暂存区
git commit -m "提交说明" # 将暂存区内容提交到版本库
示例:
git add page/login/index.html
查看暂存区中的文件:
git ls-files
三、文件状态与 git status
查看文件状态(简洁模式):
git status -s
输出示例中每一列的含义:
- 第一列:暂存区状态
- 第二列:工作区状态
常见状态标识:
| 状态 | 含义 |
|---|---|
| U | 未跟踪(Untracked) |
| A | 新添加(Added) |
| M | 已修改(Modified) |
| 空 | 未修改 |
四、Git 暂存区的常见操作
1️⃣ 用暂存区覆盖工作区
git restore 文件名
危险操作:会丢弃工作区的修改,完全确认后再使用。
2️⃣ 从暂存区移除文件(不删除工作区文件)
git rm --cached 文件名
执行后,文件会变成 未跟踪(U)状态。
五、查看提交历史
查看简洁提交记录
git log --oneline
查看完整操作历史(包括回退、reset)
git reflog
reflog非常重要,误删提交后也能靠它找回来。
六、Git 版本回退(reset)
Git 提供了三种常见的回退方式:
1️⃣ soft(只回退 commit)
git reset --soft 版本号
- 保留暂存区
- 保留工作区
2️⃣ mixed(默认)
git reset --mixed 版本号
- 暂存区被清空
- 工作区内容保留
3️⃣ hard(危险)
git reset --hard 版本号
- 暂存区 + 工作区 全部覆盖
- 本地修改彻底丢失
回退后可以继续修改并提交,会生成 新的提交记录
七、Git 忽略文件(.gitignore)
通过 .gitignore 文件,可以指定 Git 不需要追踪的文件,例如:
- 编译产物
- 日志文件
- 本地配置文件
常见示例:
node_modules/
*.log
.idea/
八、Git 分支管理
分支基础概念
master/main:主分支HEAD:当前指针,指向当前分支
常用命令
创建分支:
git branch 分支名
切换分支:
git checkout 分支名
查看分支:
git branch
九、分支合并与删除
合并分支
git merge 分支名
示例流程:
git checkout master
git merge content
git branch -d content
当两个分支在同一基础上各自产生了新的提交,Git 会生成一次 新的 merge 提交记录。
十、合并冲突解决
当多个分支修改了同一文件的同一位置,就会产生冲突。
解决步骤:
- 使用 VS Code 或编辑器打开冲突文件
- 手动选择保留的代码
- 再次提交一次:
git add .
git commit -m "解决合并冲突"
十一、远程仓库(GitHub / Gitee)
添加远程仓库
git remote add origin 远程仓库地址
推送代码到远程仓库
git push -u origin master
等价写法:
git push --set-upstream origin master:master
删除远程仓库配置:
git remote remove origin
十二、克隆远程仓库
git clone 仓库地址
clone会自动:
- 下载代码
- 初始化 Git 仓库
- 关联远程仓库
十三、多人协同开发流程
情况一:本地没有仓库
git clone 仓库地址
情况二:本地已有仓库
git pull origin master
使用 rebase 的方式拉取代码
git pull --rebase origin master
rebase会把你的提交“接”到远程最新提交后面,让提交历史更线性。
十四、撤销某次提交(推荐)
git revert commit_id
git push
revert不会破坏历史记录,是多人协作中最安全的撤销方式。
十五、⚠️ 注意事项:rebase 的问题 & 为什么企业更常用 git stash
在学习 Git 的过程中,很多教程都会推荐使用 git pull --rebase,但在真实的企业开发环境中,需要谨慎使用。
1️⃣ rebase 的优点(为什么有人用)
git pull --rebase origin master
rebase 的核心作用是:
- 把本地提交“挪到”远程最新提交之后
- 让提交记录 更加线性、像一条直线
- 看起来“很干净”
示意效果:
A -- B -- C -- D
而不是:
A -- B ----- E
\ /
C -- D
2️⃣ rebase 的问题(重点)
⚠️ rebase 最大的问题:它会“重写历史”
具体表现为:
- 原来的提交 commit id 会发生变化
- 一些提交记录在
git log中 再也找不到 - 只能在
git reflog中勉强找回 - 多人协作时,极易造成混乱甚至代码丢失
常见风险场景
-
你 rebase 了已经推送到远程的提交
-
同事基于你的旧提交继续开发
-
commit 历史被改写,导致:
- 冲突异常复杂
- 需要强制推送(
git push -f) - 这是企业中明令禁止的操作
3️⃣ 企业开发中:一般不推荐 rebase
在实际工作中,大多数团队的原则是:
- 不改公共分支的提交历史
- 保证提交记录可追溯、可审计
- 出问题能快速定位责任提交
因此更常见的做法是:
git pull(merge 方式)- 或者使用
git stash临时保存修改
4️⃣ git stash 是什么?
git stash 用来 临时保存当前工作区和暂存区的修改,让你可以:
- 快速切换分支
- 拉取最新代码
- 处理紧急 Bug
- 而 不影响当前未完成的代码
使用场景举例
正在写功能 A
👉 突然通知你修一个线上 Bug
👉 代码还没写完,不想 commit
这时就非常适合用 stash。
5️⃣ git stash 的常用命令
保存当前修改
git stash
或者带说明:
git stash save "正在开发登录功能"
查看 stash 列表
git stash list
恢复最近一次 stash(不删除)
git stash apply
恢复并删除 stash
git stash pop
恢复指定 stash
git stash apply stash@{0}
6️⃣ 为什么企业更偏向用 stash?
git stash 的优点:
✅ 不改写任何提交历史
✅ 不影响远程分支
✅ 不需要 commit 半成品代码
✅ 非常适合临时切任务、修 Bug
✅ 安全、可控、符合团队规范
👉 在企业中更常见的工作流是:
写代码 → stash → 切分支 → pull / 修 Bug → 回来 pop → 继续写
而不是:
写代码 → rebase → 强推 → 祈祷同事没骂你
在公司里:
能不用 rebase 就不用
能用 stash 解决的,千万别强推