深入理解 Git Stash:功能、用法与实战示例

文章目录

  • [深入理解 Git Stash:功能、用法与实战示例](#深入理解 Git Stash:功能、用法与实战示例)
    • [一、Git Stash 的核心概念](#一、Git Stash 的核心概念)
    • [二、Git Stash 的基本用法](#二、Git Stash 的基本用法)
      • [1. 存储当前修改](#1. 存储当前修改)
      • [2. 查看 Stash 列表](#2. 查看 Stash 列表)
      • [3. 恢复 Stash](#3. 恢复 Stash)
      • [4. 恢复并删除 Stash](#4. 恢复并删除 Stash)
      • [5. 删除 Stash](#5. 删除 Stash)
        • [(1)删除指定 Stash](#(1)删除指定 Stash)
        • [(2)清空所有 Stash](#(2)清空所有 Stash)
    • [三、Git Stash 进阶用法](#三、Git Stash 进阶用法)
      • [1. 存储未追踪(untracked)文件](#1. 存储未追踪(untracked)文件)
      • [2. 存储所有(包括被忽略的文件)](#2. 存储所有(包括被忽略的文件))
      • [3. 为 Stash 添加描述](#3. 为 Stash 添加描述)
      • [4. 创建并切换到新分支](#4. 创建并切换到新分支)
    • [四、Git Stash 示例](#四、Git Stash 示例)
      • [场景 1:切换分支但不想提交](#场景 1:切换分支但不想提交)
        • [假设你在 `main` 分支上做了一些修改,但暂时不想提交,需要切换到 `develop` 分支](#假设你在 main 分支上做了一些修改,但暂时不想提交,需要切换到 develop 分支)
      • [场景 2:修复 Bug 并恢复工作](#场景 2:修复 Bug 并恢复工作)
        • [假设你正在 `feature-branch` 分支开发一个新功能,但突然需要切换到 `main` 分支修复一个紧急 Bug](#假设你正在 feature-branch 分支开发一个新功能,但突然需要切换到 main 分支修复一个紧急 Bug)
      • [场景 3:恢复特定 Stash](#场景 3:恢复特定 Stash)
        • [假设你有多个 stash 记录,并希望恢复某个特定的 stash](#假设你有多个 stash 记录,并希望恢复某个特定的 stash)
    • 五、总结

深入理解 Git Stash:功能、用法与实战示例

git stash 是 Git 中用于临时保存当前工作区修改的命令,主要用于在切换分支或进行其他 Git 操作时,避免未提交的修改被干扰或丢失。Stash 允许你保存当前的修改,并在需要时重新应用。

一、Git Stash 的核心概念

Git Stash 类似于一个栈(Stack),使用 LIFO(后进先出) 方式管理多个存储项。每次执行 git stash,都会创建一个新的 stash 记录,并将其存入栈顶。

二、Git Stash 的基本用法

1. 存储当前修改

bash 复制代码
git stash

该命令会保存未提交的修改 ,但不会包括未追踪(untracked)的文件或被忽略的文件。

2. 查看 Stash 列表

bash 复制代码
git stash list

显示所有存储的 stash 记录,每个记录会有一个索引,如:

bash 复制代码
stash@{0}: WIP on main: 3a2e1b0 Add new feature
stash@{1}: WIP on develop: 8b51c14 Fix bug

3. 恢复 Stash

bash 复制代码
git stash apply

将最近的 stash 应用回当前工作区,但不会删除 stash 记录。

如果想应用某个特定的 stash(如 stash@{1}),可以使用:

bash 复制代码
git stash apply stash@{1}

4. 恢复并删除 Stash

bash 复制代码
git stash pop

该命令会恢复最近的 stash,并从 stash 栈中删除该记录。

5. 删除 Stash

(1)删除指定 Stash
bash 复制代码
git stash drop stash@{0}

删除指定的 stash 记录,如 stash@{0}。

(2)清空所有 Stash
bash 复制代码
git stash clear

删除所有 stash 记录,不可恢复!


三、Git Stash 进阶用法

1. 存储未追踪(untracked)文件

bash 复制代码
git stash -u

或

bash 复制代码
git stash --include-untracked

该命令会保存未追踪文件(untracked),但不包括被 .gitignore 忽略的文件。

2. 存储所有(包括被忽略的文件)

bash 复制代码
git stash -a

或

bash 复制代码
git stash --all

该命令会保存所有文件 ,包括 .gitignore 忽略的文件。

3. 为 Stash 添加描述

bash 复制代码
git stash save "修复首页样式问题"

这样在 git stash list 中可以看到有意义的描述。

4. 创建并切换到新分支

bash 复制代码
git stash branch new-feature-branch

该命令会:

  • 创建一个新的 new-feature-branch 分支
  • 切换到该分支
  • 应用最近的 stash

四、Git Stash 示例

场景 1:切换分支但不想提交

假设你在 main 分支上做了一些修改,但暂时不想提交,需要切换到 develop 分支
bash 复制代码
# 查看当前状态
git status

# 临时保存工作
git stash

# 切换分支
git checkout develop

# 进行其他操作...

# 切回 main 分支
git checkout main

# 取回之前的修改
git stash pop

场景 2:修复 Bug 并恢复工作

假设你正在 feature-branch 分支开发一个新功能,但突然需要切换到 main 分支修复一个紧急 Bug
bash 复制代码
# 先 stash 你的当前工作
git stash

# 切换到 main 分支
git checkout main

# 修复 bug 并提交
git commit -am "Fix critical bug"

# 切回原来的分支
git checkout feature-branch

# 恢复之前的修改
git stash pop

场景 3:恢复特定 Stash

假设你有多个 stash 记录,并希望恢复某个特定的 stash
bash 复制代码
git stash list

输出:

text 复制代码
stash@{0}: WIP on main: 修复登录界面样式
stash@{1}: WIP on main: 添加新功能
stash@{2}: WIP on develop: 调整 API 请求

如果你想恢复 stash@{1},可以:

bash 复制代码
git stash apply stash@{1}

如果不再需要该 stash,可以手动删除:

bash 复制代码
git stash drop stash@{1}

五、总结

命令 作用
git stash 存储当前修改(不包含 untracked 文件)
git stash -u 存储当前修改(包含 untracked 文件)
git stash -a 存储当前修改(包含 untracked 和 ignored 文件)
git stash list 查看 stash 列表
git stash apply 恢复最近的 stash(不删除)
git stash pop 恢复最近的 stash(并删除)
git stash drop stash@{N} 删除指定 stash
git stash clear 清空所有 stash
git stash save "message" 带描述存储 stash
git stash branch new-branch 创建新分支并应用 stash

Git Stash 是一个非常实用的工具,能帮助你临时保存修改,避免代码丢失,灵活管理未提交的更改。

相关推荐
笨笨饿8 小时前
#142_VS Code.map文件插件的用法
git·python·stm32·单片机·嵌入式硬件·物联网·vim
鬼手点金10 小时前
如何选择模型
java·前端·人工智能·git·深度学习
余槐i10 小时前
Claude Code Skills 放对目录却不生效:插件启用顺序与缓存的三个坑
git·开发工具·ai agent·mcp·claude code
程序员差不多先生1 天前
Anthropic 用 5 个月重写了 Git:当 AI Agent 把版本控制系统逼到墙角
人工智能·git·elasticsearch·deepseek v4 pro·kimi k3·glm 5.3·qwen3.7 max
leo_厉锵1 天前
GIT习题
git
catoop2 天前
用 Shell 包装函数,让单个命令拥有专属配置
git
Zguigo2 天前
学会更高效的理解AI的输出?
人工智能·git·ai
鬼手点金2 天前
上下文:Agent 的眼睛
java·前端·人工智能·git·深度学习
guohuang2 天前
让机器人安全失败:点云中断、TF 超时和控制器崩溃怎么测
git·安全·机器人
小道士写程序2 天前
Git 大文件问题解决办法
git