第 7 课:常用高级技巧
学完前面的课程后,你已经具备了日常开发所需的 Git 基础能力。
但在真实项目中,还会经常遇到一些特殊场景:
- 代码写到一半要切换任务
- 某些文件不想提交到 Git
- 想查看具体修改内容
- 比较两个版本之间的差异
这一课将学习开发中最常用的 Git 高级技巧。
7.1 暂存当前工作(git stash)
开发中经常会遇到这种情况:
你正在开发:
用户登录功能
代码写了一半。
突然产品经理说:
线上支付出现Bug
立刻修复
此时:
代码未完成
不能提交。
但又必须切换分支。
怎么办?
Git 提供:
git stash
用于临时保存当前工作。
保存当前工作
执行:
git stash
效果:
工作区
↓
保存到 Stash
↓
工作区恢复干净
查看状态:
git status
输出:
working tree clean
说明:
当前修改已被临时保存
7.2 查看所有暂存记录
执行:
git stash list
输出:
stash@{0}: WIP on dev
stash@{1}: WIP on feature/login
含义:
stash@{0}
最新保存。
stash@{1}
更早保存。
类似:
临时存档列表
7.3 恢复最近一次暂存
修复完 Bug 后。
恢复之前的开发现场:
git stash pop
效果:
恢复代码
删除暂存记录
流程:
stash
↓
工作区
7.4 恢复指定暂存
例如:
git stash list
输出:
stash@{0}
stash@{1}
stash@{2}
恢复:
git stash apply stash@{1}
注意:
apply
只恢复。
不会删除记录。
7.5 删除指定暂存
删除:
git stash drop stash@{1}
删除所有:
git stash clear
⚠️ 慎用:
不可恢复
7.6 给 Stash 添加备注
默认:
git stash
显示:
WIP on dev
推荐:
git stash push -m "登录功能开发到一半"
查看:
git stash list
输出:
stash@{0}: 登录功能开发到一半
更加清晰。
7.7 什么是 .gitignore?
并不是所有文件都应该提交到 Git。
例如:
日志文件
编译文件
依赖包
环境配置
如果全部提交:
仓库越来越大
甚至泄露密码。
因此需要:
.gitignore
7.8 创建 .gitignore
项目根目录:
.gitignore
例如:
project
├── src
├── pom.xml
├── .gitignore
Git 会自动读取。
7.9 忽略依赖目录
前端项目:
node_modules
通常几十万文件。
写入:
node_modules/
Git 不再管理。
7.10 忽略配置文件
例如:
.env
里面可能包含:
数据库密码
Redis密码
JWT密钥
配置:
.env
.env.local
避免泄露敏感信息。
7.11 忽略日志文件
日志通常无需上传。
配置:
*.log
匹配:
app.log
error.log
system.log
全部忽略。
7.12 忽略 IDE 配置
不同开发者使用不同 IDE。
例如:
IntelliJ IDEA
VSCode
配置:
.idea/
.vscode/
避免无意义提交。
7.13 常见 .gitignore 示例
Java 项目:
# Maven
target/
# IDEA
.idea/
# Logs
*.log
# Environment
.env
Node.js 项目:
node_modules/
dist/
.env
*.log
7.14 .gitignore 为什么不生效?
最常见原因:
文件已经被Git跟踪
例如:
git add .env
已经提交过。
后来:
.env
不会生效。
解决:
git rm --cached .env
重新提交:
git commit -m "移除环境配置文件"
即可生效。
7.15 查看文件修改内容
开发中最常用命令之一:
git diff
例如:
修改:
String name = "Tom";
变成:
String name = "Jerry";
执行:
git diff
输出:
- String name = "Tom";
+ String name = "Jerry";
含义:
- 删除
+ 新增
7.16 查看暂存区差异
普通:
git diff
比较:
工作区
VS
暂存区
查看暂存区:
git diff --cached
比较:
暂存区
VS
本地仓库
提交前非常有用。
7.17 查看两个提交之间的差异
查看:
git log --oneline
输出:
a1b2c3d
b2c3d4e
比较:
git diff a1b2c3d b2c3d4e
查看:
两个版本之间修改了什么
7.18 查看某个文件的差异
例如:
UserService.java
执行:
git diff a1b2c3d b2c3d4e UserService.java
只查看:
UserService.java
变化。
7.19 开发中的典型场景
场景:
登录功能开发一半
突然:
线上Bug
操作:
git stash
保存现场。
切换:
git checkout main
修复:
线上Bug
修复完成:
git checkout feature/login
git stash pop
继续开发。
这就是:
stash 的经典使用场景
7.20 企业开发建议
提交前:
git diff
检查代码。
每天:
git pull
同步代码。
环境配置:
必须加入 .gitignore
开发到一半:
git stash
保存现场。
不要把:
node_modules
target
.idea
.vscode
提交到仓库。
本课总结
掌握以下命令:
保存当前工作
git stash
查看暂存列表
git stash list
恢复最近暂存
git stash pop
恢复指定暂存
git stash apply stash@{0}
删除暂存
git stash drop stash@{0}
查看修改内容
git diff
查看暂存区差异
git diff --cached
比较两个提交
git diff 提交1 提交2
牢记:
stash 解决临时切换任务
.gitignore 解决无关文件提交
diff 解决代码变化查看
至此,你已经掌握了 Git 日常开发中的绝大多数高频操作。
下一课《第 8 课:Git 标签(Tag)管理》将学习:
- 什么是 Tag
- 为什么发布版本要打 Tag
- 创建标签
- 查看标签
- 删除标签
- 推送标签
- 企业级版本发布规范