前置知识: Git

git-stash

1 minIntermediate2026/6/14

git stash详解:暂存工作进度、多栈管理与典型应用场景。

1. stash 概述

1.1 什么是 stash

git stash 将工作区和暂存区的修改临时保存到栈中,恢复工作区到干净状态。

工作区(有修改) → git stash → 工作区(干净)

                  stash 栈
                  ┌───────┐
                  │stash@{2}│
                  │stash@{1}│
                  │stash@{0}│ ← 最新
                  └───────┘

2. 基本用法

2.1 创建 stash

# 保存所有已跟踪文件的修改
git stash

# 保存时添加消息
git stash push -m "WIP: feature auth"

# 包含未跟踪的文件
git stash -u
git stash --include-untracked

# 包含被忽略的文件
git stash -a
git stash --all

# 只暂存部分文件
git stash push -p          # 交互式选择
git stash push file.txt    # 指定文件

2.2 查看 stash

# 查看所有 stash
git stash list
# stash@{0}: On main: WIP: feature auth
# stash@{1}: WIP on main: abc1234 fix: bug

# 查看 stash 内容
git stash show             # 最新 stash 的摘要
git stash show -p          # 最新 stash 的差异
git stash show stash@{1}   # 指定 stash 的摘要
git stash show -p stash@{1}

2.3 恢复 stash

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

# 恢复但保留 stash
git stash apply            # 恢复最新的 stash
git stash apply stash@{1}  # 恢复指定 stash

# 恢复暂存区状态
git stash apply --index    # 同时恢复暂存区

2.4 删除 stash

# 删除指定 stash
git stash drop stash@{1}

# 删除所有 stash
git stash clear

3. 高级用法

3.1 从 stash 创建分支

# 基于 stash 创建新分支
git stash branch feature-from-stash stash@{0}
# 1. 创建新分支
# 2. 恢复 stash 内容
# 3. 删除 stash

3.2 部分暂存

# 交互式选择暂存内容
git stash push -p
# Stash this hunk [y,n,q,a,d,/,s,e,?]?

3.3 查看 stash 中的文件

# 查看 stash 中某个文件的内容
git show stash@{0}:src/index.js

# 比较 stash 和当前工作区
git diff stash@{0}

4. 典型场景

4.1 紧急修复

# 正在开发功能,需要紧急修复 Bug
git stash -m "WIP: feature"
git checkout main
git checkout -b hotfix/bug-123
# ... 修复 Bug ...
git commit -m "fix: resolve bug 123"
git checkout feature
git stash pop

4.2 切换分支

# 需要切换分支但不想提交半成品
git stash
git checkout other-branch
# ... 完成其他工作 ...
git checkout feature
git stash pop

4.3 多任务并行

# 多个 WIP 进度
git stash push -m "feature A"
# ... 工作 ...
git stash push -m "feature B"

# 查看所有进度
git stash list

# 恢复特定进度
git stash apply stash@{1}

5. 注意事项

  • git stash pop 如果有冲突,stash 不会被删除
  • stash 是本地的,不会推送到远程
  • 默认不保存未跟踪文件,需加 -u
  • 长期不用的 stash 应及时清理