第 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
  • 创建标签
  • 查看标签
  • 删除标签
  • 推送标签
  • 企业级版本发布规范