git stash 和 git stash apply

这两个命令是 Git 中用于"临时保存和恢复工作进度"的核心功能。简单来说,git stash 负责**"存"** ,而 git stash apply 负责**"取"**。

以下是它们的详细对比和用法:

1. git stash (暂存/保存)

  • 作用 :将你当前工作区中未提交的修改(包括已暂存和未暂存的已跟踪文件)临时保存起来,并将你的工作区恢复到干净的状态(与最近一次提交一致)。
  • 使用场景:当你正在开发新功能,突然需要切换分支去修复紧急 Bug,但手头的工作还没做完,不想提交一个半成品时。
  • 常用命令 :
    • git stash:快速保存当前修改(默认信息为 WIP on branch...)。
    • git stash save "描述信息" 或 git stash push -m "描述信息":保存修改并添加备注,方便日后查找。
    • git stash -u:将未跟踪的新文件(Untracked files)也一起保存。

2. git stash apply (恢复/应用)

  • 作用 :将你之前保存的修改重新应用到当前的工作区中。重点是:它不会删除 stash 列表中的记录 。你可以对同一个 stash 记录多次执行 apply。
  • 使用场景:当你处理完紧急 Bug,切回原来的分支,想要恢复之前保存的代码继续开发时。
  • 常用命令 :
    • git stash apply:恢复最近一次保存的修改。
    • git stash apply stash@{n}:恢复指定的某一次修改(n 为数字索引,可通过 git stash list 查看)。

💡 核心进阶:apply vs pop

在实际开发中,提到 apply 就不得不提它的"兄弟"命令 git stash pop。两者的区别非常关键:

特性 git stash apply git stash pop
恢复代码 ✅ 将修改应用到工作区 ✅ 将修改应用到工作区
删除 stash 记录 ❌ 保留在 stash 列表中 ✅ 应用成功后自动删除该记录
适用场景 需要反复应用同一段暂存代码,或不确定应用是否成功时 恢复代码后确认无误,不需要再次使用该暂存记录时

📝 完整的日常操作流程示例

  1. 保存进度:

    复制代码
    git stash push -m "开发登录功能到一半"
  2. 查看保存列表(确认是否保存成功):

    复制代码
    git stash list
    # 输出示例: stash@{0}: On main: 开发登录功能到一半
  3. 切换分支去干别的事

    复制代码
    git checkout bugfix-branch
    # ... 修复Bug并提交 ...
  4. 切回原分支并恢复进度

    复制代码
    git checkout main
    git stash apply  # 恢复代码,且保留 stash 记录作为备份
  5. 确认无误后,清理 stash 列表(可选):

    复制代码
    git stash drop stash@{0} # 手动删除刚才恢复的记录

总结 :git stash 是你的"代码存档点",而 git stash apply 是"读档但不删存档",如果你希望"读档并删存档",请使用 git stash pop。

相关推荐
挖掘狂人1 天前
Git 从 0 到 1:用一个小项目走完 add / commit / reset / merge / rebase / push
git·后端·github
codigger1 天前
Git 三区域模型:把 add、commit、reset、merge 一次讲透
git·github·编程·编程语言
水饺编程1 天前
第1章:开发环境搭建,在 Windows 中安装 Git
linux·c语言·汇编·git·ubuntu
idanzk1 天前
Git 推送 GitHub 报 SSL_READ /src refspec main 不匹配 完整踩坑记录
git·github·ssl
星恒随风1 天前
Linux开发工具详解(二):Git版本控制、GitHub协作与GDB调试实战
linux·笔记·git·学习·github
寺中人2 天前
Xshell 完全入门指南:从安装到实战,远程连接+文件传输+会话管理全拆解
git·ssh·github·php·远程连接·xshell·运维工具
酬谢神明则必安2 天前
git学习记录01
linux·git·学习
lingchen19062 天前
版本控制 Git源代码项目管理
git
虫无涯2 天前
Coverity 如何结合 GJB8114-2013使用?
git·单元测试·嵌入式测试·coverity·静态扫描
喵本喵叁肆2 天前
Git 深度解读:从对象模型到分支指针,把版本控制的内核讲透
git