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 上手教程
git·固件开发·嵌入式版本管理
克里斯蒂亚诺更新1 天前
云效和IDEA关于git的相通使用
git
Gavynlee1 天前
Git 操作问题排查与解决方案记录(Gitee 实战)
git·elasticsearch·gitee
邪修king1 天前
Re:Linux系统篇(十):从零上手 Git + GitHub(Ubuntu 环境实操完整版|个人代码归档必备)
linux·git·github
李可以量化1 天前
Redis 从了解到精通(三)下:性能基准测试与量化场景性能避坑指南
redis·git·python·量化交易·qmt·ptrade
青 春 记 忆1 天前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
牢姐与蒯1 天前
Linux基础开发工具之版本控制器git
git
云原生指北2 天前
Docker Sandboxes 工作区怎么接:Direct、Clone 和它们的边界
git·docker·agent
菠萝猫yena2 天前
【git】git 命令常用组合
大数据·git·elasticsearch
Liekkas Kono2 天前
aicommits 工具接入 Codex CLI 使用
git·swhl·aicommits