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

相关推荐
触底反弹4 小时前
🔥 Git 从零到精通:彻底搞懂核心概念与工作原理
git·面试·开源
tokenKe9 小时前
Epic Games 发布下一代版本控制系统 Lore:被 HN 干到 1000+ 分的“游戏版 Git“
git·游戏
Eira-Z10 小时前
git(持续学习中...)
git·学习
leoZ23114 小时前
Git 集成实战完全指南(五):Git Blame 与历史追踪
大数据·git·elasticsearch
leoZ23115 小时前
Git 集成实战完全指南(六):Git 标签与版本管理
大数据·git·elasticsearch
leoZ2312 天前
Git 集成实战完全指南(三):自动化 Commit 与 PR
大数据·git·elasticsearch
国服第二切图仔2 天前
002-Claude Code 项目解读:入口与启动流程
linux·git·ubuntu
天空'之城2 天前
VS Code Git 工作树:告别频繁切分支,实现多分支并行开发实战方案
git·vscode·版本控制·嵌入式开发·开发效率·worktree·多分支管理
程序员爱德华2 天前
VSCode git/gerrit解冲突
git·vscode·gerrit
leoZ2312 天前
Git 集成实战完全指南(二):智能分支管理
大数据·git·elasticsearch