Git stash 如何优雅地保存临时修改

133 阅读2分钟

git stash 的作用就是——当你正在开发某个功能,还没写完、不想提交,但又需要切换到其他分支或者处理紧急问题时,可以临时把当前工作区和暂存区的改动存起来,让工作区保持干净,之后再恢复。

aimili 艾米莉 ( 一款免费开源的 taimili.com )

艾米莉 是一款优雅便捷的  GitHub Star 管理和加星工具 ,基于 PHP & javascript 构建, 能对github 得 star fork follow watch 管理和提升,最适合github 的深度用户

image.png

作者:开源之眼
链接:juejin.cn/post/755246…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


1. 基础用法:保存与恢复

# 保存临时修改
git stash

# 恢复最新一次保存(同时删除 stash 记录)
git stash pop

# 恢复最新一次保存(保留 stash 记录)
git stash apply
  • stash apply:适合需要重复使用的场景(比如改动想在多个分支试验)。
  • stash pop:恢复并删除 stash,更常用。

2. 为 stash 起个名字(优雅之处 ✨)

git stash push -m "修复登录接口的临时改动"

以后查看时更清晰:

git stash list
# stash@{0}: On main: 修复登录接口的临时改动
# stash@{1}: On dev: 调试缓存逻辑

3. 部分保存(只 stash 某些文件)

如果你只想 stash 某些文件:

git stash push -m "只保存 config.js" config.js

如果只想 stash 未跟踪文件:

git stash -u   # 包含未跟踪文件
git stash -a   # 包含忽略文件

4. 查看和管理 stash

git stash show          # 查看最近一次 stash 改动的概要
git stash show -p       # 查看具体 diff

git stash list          # 查看所有 stash
git stash drop stash@{2} # 删除某个 stash
git stash clear         # 清空所有 stash

5. 在其他分支恢复 stash

场景:你在 main 分支 stash 了修改,但想在 feature 分支恢复:

git stash list
git checkout feature
git stash pop stash@{0}

这样可以跨分支共享临时改动,非常灵活。


6. 进阶技巧

  • 保存未提交的 stage 区改动git stash push --staged(Git 2.35+ 支持)。

  • 多次 stash 合并: 多次 stash 的改动如果想合并,可以在 apply 后重新 stash 一次。

  • 代替 commit -m "WIP": 不污染 commit 历史,避免 WIP 这样的临时提交。


“commit 是正式记录,stash 是临时抽屉。” 当你需要快速切换上下文时,用 git stash push -m "备注" 保存,处理完后再 git stash pop 恢复,既不丢进度,又不脏历史。