git stash

文章目录

1.简介

git stash 是一个让你临时保存当前工作区修改的命令。它会把工作区和暂存区的改动保存起来,让代码回到上一次提交的状态(干净的工作区),方便你切换分支处理其他任务。稍后可以再把保存的内容恢复回来继续开发。

核心价值:避免提交半成品代码,又能自由切换分支。

2.格式

bash 复制代码
git stash list [<log-options>]
git stash show [-u | --include-untracked | --only-untracked] [<diff-options>] [<stash>]
git stash drop [-q | --quiet] [<stash>]
git stash pop [--index] [-q | --quiet] [<stash>]
git stash apply [--index] [-q | --quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
	     [-u | --include-untracked] [-a | --all] [(-m | --message) <message>]
	     [--pathspec-from-file=<file> [--pathspec-file-nul]]
	     [--] [<pathspec>...​]]
git stash save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
           [-u | --include-untracked] [-a | --all] [<message>]
git stash clear
git stash create [<message>]
git stash store [(-m | --message) <message>] [-q | --quiet] <commit>
git stash export (--print | --to-ref <ref>) [<stash>...​]
git stash import <commit>

3.选项

bash 复制代码
-a, --all
	包含所有文件(包括被 `.gitignore` 忽略的)
-m, --message <message>
	添加描述信息
-u, --include-untracked
	包含未跟踪的文件
-k, --keep-index
	暂存区内容保持不变,只暂存工作区修改
-- <pathspec>
	只暂存指定路径的文件
-S, --staged
	只暂存暂存区的内容

4.示例

  1. 基础保存与恢复
bash 复制代码
# 保存当前修改
git stash

# 查看保存列表
git stash list
# 输出: stash@{0}: WIP on main: 1234567 最后一次提交

# 恢复并删除记录(最常用)
git stash pop
  1. 保存时添加描述(推荐)
bash 复制代码
# 带描述保存,便于识别
git stash save "正在开发用户登录功能"

# 或使用 push 写法
git stash push -m "正在开发用户登录功能"
  1. 包含未跟踪的文件
bash 复制代码
# 新建了文件但还没 add,默认 stash 不会保存
git stash -u   # 包含未跟踪文件
git stash -a   # 包含所有文件(包括 .gitignore 忽略的)
  1. 紧急修复 Bug 场景
bash 复制代码
# 1. 在 feature 分支开发到一半
git stash save "feature 开发中"

# 2. 切换到 master 修 Bug
git checkout master
# 修复 Bug、提交...

# 3. 切回 feature,恢复进度
git checkout feature
git stash pop
  1. 恢复指定的 stash
bash 复制代码
# 查看所有 stash
git stash list
# stash@{0}: On main: 登录功能
# stash@{1}: On main: 缓存优化

# 恢复指定的 stash(并删除)
git stash pop stash@{1}

# 恢复指定的 stash(保留记录)
git stash apply stash@{1}
  1. 只暂存部分文件
bash 复制代码
# 只暂存指定文件
git stash push -m "只存这个文件" -- path/to/file.go
  1. 查看 stash 内容
bash 复制代码
# 查看最近一次 stash 的改动摘要
git stash show

# 查看完整 diff
git stash show -p

# 查看指定 stash 的完整 diff
git stash show -p stash@{1}
  1. 从 stash 创建新分支
bash 复制代码
# 当 stash 与当前分支有冲突时,可以直接创建新分支
git stash branch new-feature stash@{0}

5.小结

场景 推荐命令
保存当前进度 git stashgit stash save "描述"
查看保存记录 git stash list
恢复并继续 git stash pop
恢复但保留记录 git stash apply
丢弃某个记录 git stash drop stash@{n}
清空所有记录 git stash clear
包含新文件 git stash -u

一句话总结git stash = 临时保存 → 切换分支干活 → 恢复继续。用完即走,不污染提交历史。


参考文献

Git - git-stash Documentation

相关推荐
游九尘2 小时前
git只忽略自己本地的文件,其他人的文件正常提交
git
SiYuanFeng2 小时前
新手学Git:以一个小游戏项目为例,完成初始化、提交、查看历史与恢复版本
大数据·git·elasticsearch
rayyy93 小时前
Git 忽略已提交过的文件夹 完整步骤
git
YoseZang3 小时前
【手工】git的使用 - 密钥生成和多账户使用(config文件)
git
韭菜钟3 小时前
Git 代理与内网 Gitea 共存方案(无需 no_proxy)
git·gitea
zhougl9965 小时前
Git 命令速查手册
大数据·git·elasticsearch
小陈同学呦6 小时前
Git Worktree 并行开发实战指南
git·vibecoding
码农小旋风6 小时前
2026 最新 Claude Code Windows 安装教程:Node、Git Bash、命令检查一步步配好
windows·git·bash·claude
ethan.Yin6 小时前
Git_查看已删除文件的历史
git
KieranYin21 小时前
Git_查看已删除文件的历史
git