如何临时保存工作进度(git stash)?

2026-06-10 09:04:00
Git基础入门
原创
31
摘要:你正专心致志地开发一个新功能,代码写到一半,思路正好。突然,项目经理或同事紧急通知,线上出现了一个急需修复的 Bug,必须马上处理。

此时你的工作目录一团糟,新功能的文件改动了一半,既不能提交(commit),也不想放弃。直接切换分支去修复 Bug,这些未提交的修改很可能会被带到新分支,造成混乱,甚至丢失。

这种进退两难的场景,正是 git stash 发挥作用的时刻。它就像一个“临时储物柜”,可以帮你把当前工作区的所有修改一股脑儿地打包存起来,让你的工作目录瞬间恢复到干净的状态,然后你就可以安心地切换分支去处理紧急任务了。

核心三步:暂存、切换与恢复

整个 git stash 的核心工作流非常简单直接,可以概括为三个主要步骤。

第一步:将当前修改存起来

当需要中断当前工作时,你只需要在终端执行一个简单的命令,就可以将所有已跟踪文件(tracked files)的修改保存起来。

git stash

执行后,你会发现所有修改都消失了,工作目录回到了上次提交时的状态。

为了避免将来忘记这个“储藏”是做什么的,强烈建议在保存时加上一段描述信息。这在你有多个储藏时会非常有用。

git stash save "正在开发用户认证功能"

这样,你就为这次的暂存打上了一个清晰的标签。

第二步:查看已暂存的工作列表

处理完紧急任务后,你回到了原来的分支,准备继续之前的工作。如果你不确定自己存了些什么,或者存了多少次,可以使用以下命令查看所有的储藏记录。

git stash list

终端会显示一个列表,类似这样: stash@{0}: On feature-auth: 正在开发用户认证功能 stash@{1}: On main: 临时修复排版问题

列表最上面的 stash@{0} 代表最近一次的储藏,以此类推。你之前添加的备注信息在这里就起到了关键作用,让你能一眼识别出每个储藏的内容。

第三步:恢复之前的工作进度

确认要恢复哪个储藏后,就可以把它从“储物柜”里取出来了。Git 提供了两种主要的方式来恢复,这关系到下一步的关键选择。

pop 还是 apply?一个关键的选择

恢复储藏时,git stash pop 和 git stash apply 是最常用的两个命令。它们都能将文件恢复到你的工作目录,但有一个核心区别。

git stash pop:取出并删除

这个命令会将最近一次的储藏(也就是 stash@{0})应用到当前工作目录,并且,如果这个过程没有发生冲突,它会自动从储藏列表中删除这个储藏记录。

git stash pop

它相当于“剪切并粘贴”。这个操作很便捷,一步到位。但如果恢复时发生了代码冲突,pop 不会自动删除储藏,这是一种安全机制,需要你手动解决冲突后再自行删除。

git stash apply:只取出,不删除

相比之下,apply 命令则更加稳妥。它同样会将储藏应用到当前工作目录,但它不会自动删除储藏记录。

git stash apply

它相当于“复制并粘贴”。储藏记录会一直保留在列表中,直到你确认所有工作都已正确恢复,再手动使用 git stash drop stash@{0} 将其删除。

应该如何选择?

对于大多数情况,特别是当你对可能发生的冲突没有十足把握时, 使用 git stash apply 是一个更安全的选择。它给了你一次“反悔”的机会。你可以先应用,检查代码是否正常,确认无误后再手动删除。

而 git stash pop 更适合那些你非常确定不会产生冲突的、快速的临时切换场景。

一些常见问题

在使用 git stash 的过程中,你可能还会遇到一些具体的问题。

我只想恢复储藏中的部分文件怎么办?

有时候你并不想恢复整个储藏包,可能只需要其中的一两个文件。虽然 stash 主要设计用于整体保存和恢复,但你也可以通过变通的方式实现部分恢复。

git checkout stash@{0} -- <文件路径>

这个命令可以从指定的储藏中检出单个文件,而不会影响其他文件。

暂存了多次,如何恢复指定的某一个?

如果你的储藏列表里有多个记录,pop 和 apply 默认只操作最新的 stash@{0}。要恢复更早的储藏,只需在命令后加上它的标识符即可。

git stash apply stash@{2}

如何删除一个或所有暂存?

当你确认某个储藏不再需要时,可以用 drop 命令来删除它。

git stash drop stash@{1}

如果你想清空所有的储藏记录,可以使用 clear 命令,但请务必谨慎,这个操作是不可逆的。

git stash clear

git stash 会保存新建的文件吗?

默认情况下,git stash 只会储藏已经被 Git 跟踪(tracked)的文件的修改。那些你刚刚新建、还未执行 git add 的文件(untracked files)是不会被储藏的。

如果你希望连同新创建的文件一起储藏,需要添加 -u 或 --include-untracked 参数。

git stash -u

总结:git stash 的最佳实践

git stash 是一个强大而便捷的工具,但要用好它,记住以下几个原则能让你的工作流更清晰、更安全。

  • 永远添加备注:使用 git stash save "message",而不是简单的 git stash。清晰的备注是未来你感谢自己的最好礼物。
  • 优先使用 apply:除非你百分之百确定,否则 apply 比 pop 更安全。它给你留下了检查和后悔的余地。
  • 及时清理:一旦确认恢复的工作没有问题,就用 git stash drop 清理掉对应的储藏,保持列表的干净整洁。
  • 它不是备份工具:请牢记,stash 是一个本地的、临时的储藏区。不要用它来长期保存重要的代码变更,为此你应该使用分支和提交。
发表评论
评论通过审核后显示。