git stash

git stash 是 Git 的一个实用命令,用于临时保存当前工作目录和暂存区的修改,以便你可以切换到其他分支或任务,稍后再恢复这些更改。以下是关于 git stash 的详细说明和常见用法:


基本用法

  1. 保存当前修改(不包含未跟踪的文件)

    bash 复制代码
    git stash

    等价于:

    bash 复制代码
    git stash push
  2. 保存修改并包含未跟踪的文件(untracked files)

    bash 复制代码
    git stash -u

    或:

    bash 复制代码
    git stash --include-untracked
  3. 保存修改并包含所有文件(包括 ignored 文件)

    bash 复制代码
    git stash -a

    或:

    bash 复制代码
    git stash --all
  4. 添加说明信息(方便识别)

    bash 复制代码
    git stash save "描述信息"

查看存储的 stash 列表

bash 复制代码
git stash list

输出示例:

复制代码
stash@{0}: On main: 描述信息
stash@{1}: On feature-branch: WIP

恢复 stash

  1. 恢复最近一次的 stash 并删除 stash 记录(默认)

    bash 复制代码
    git stash pop
  2. 恢复指定 stash(不删除记录)

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

    例如:

    bash 复制代码
    git stash apply stash@{0}
  3. 恢复 stash 并删除记录

    bash 复制代码
    git stash pop stash@{n}

删除 stash

  1. 删除最近一次的 stash

    bash 复制代码
    git stash drop
  2. 删除指定的 stash

    bash 复制代码
    git stash drop stash@{n}
  3. 清空所有 stash

    bash 复制代码
    git stash clear

进阶用法

  1. 将 stash 应用到其他分支

    • 先切换到目标分支,再运行 git stash apply
  2. 从 stash 创建新分支

    bash 复制代码
    git stash branch 新分支名 stash@{n}

    这会基于 stash 的提交创建一个新分支,并自动删除该 stash。

  3. 查看 stash 的差异

    bash 复制代码
    git stash show -p stash@{n}

常见场景示例

场景 1:临时切换分支
bash 复制代码
# 当前有未提交的修改
git stash
git checkout 其他分支
# 完成其他任务后切回原分支
git checkout 原分支
git stash pop
场景 2:保存未完成的实验性代码
bash 复制代码
git stash save "实验性功能A的部分代码"
# 后续恢复
git stash pop
场景 3:误删 stash 后恢复

如果误删了未备份的 stash,可以通过 Git 的引用日志找回:

bash 复制代码
git fsck --unreachable | grep commit | awk '{print $3}' | xargs git show
# 找到对应的提交后,手动恢复

注意事项

  1. 冲突处理

    如果 popapply 时发生冲突,需手动解决冲突后提交。

  2. 未跟踪文件

    默认不保存未跟踪文件(需加 -u-a 参数)。

  3. 长期存储

    Stash 是临时存储,长期未使用的 stash 可能会被垃圾回收(建议提交到分支)。

  4. 安全性

    敏感数据(如密码)不建议存到 stash,可能通过日志泄露。


通过灵活使用 git stash,你可以高效管理临时修改,避免不必要的提交或丢失工作进度!

相关推荐
满天星830357711 小时前
【Git】原理及使用(七) (多人协作 [下])
git
郡杰17 小时前
Git基础与开发平台搭建
git·后端
钟智强19 小时前
我警告了 329 天
git·php·wordpress·webshell
乐观的冷风21 小时前
我们需要将文件添加到暂存区才能提交,而移除文件后是无法添加到暂存区的,那么怎么移除一个文件让GIT不再将其纳入版本控制呢?上图中GIT已经给出了说明:
git
tjl521314_211 天前
Git SSH Host Key Verification Failed 问题排查与解决
运维·git·ssh
嘶哈哈哈1 天前
[特殊字符] Git 协作指南
git
say_fall1 天前
【Git 精品详解】企业规范:企业级开发模型、Git Flow、发版流程规范、Code Owner 制度、事故应急回滚
大数据·linux·服务器·git·学习·elasticsearch
江畔柳前堤2 天前
第13章:docker生产环境部署实战
运维·git·docker·容器·代码复审
GuHenryCheng2 天前
【ESP32】ESP-IDF开发环境搭建(cursor)
git·stm32·单片机·学习
kaka。。2 天前
GIT安装+代码推送
git