Git stash 使用指南:临时保存修改与恢复工作现场

举报
GGBondHere 发表于 2026/10/24 23:18:50 2026/10/24
【摘要】 介绍 Git stash 临时保存代码修改的方法,包括未跟踪文件处理、stash 列表查看、apply 和 pop 的区别,以及同步远程仓库时如何安全恢复修改。

前言

使用 Git 开发项目时,经常会遇到代码只改了一半,却需要临时切换分支、拉取远程更新或者处理其他问题的情况。

这时直接提交一个未完成的 commit 不太合适,放弃修改又舍不得。Git 提供的 stash 功能正好可以解决这个问题:先把当前修改临时保存起来,等处理完其他事情后再恢复。

一、Git stash 是什么?

stash 可以把工作区和暂存区的修改保存到 Git 的临时记录中,并让工作区恢复到相对干净的状态。

最简单的使用方式:

git stash

不过实际开发中,更建议给记录添加说明:

git stash push -m "临时保存登录功能修改"

这样以后查看暂存列表时,就能知道每条记录保存了什么。

需要注意,stash 不是提交到当前分支的普通 commit,也不会自动同步到远程仓库,不适合代替长期备份。

二、为什么新建的文件没有保存?

这是一个常见问题。

默认情况下,git stash 主要保存已跟踪文件的修改。对于刚创建、尚未加入 Git 跟踪的文件,可能不会一起保存。

如果希望把未跟踪文件也包含进去,可以使用:

git stash push -u -m "保存当前修改"

其中 -u 表示包含未跟踪文件,但不会包含被 Git 忽略的文件。

如果还需要保存被忽略的文件,可以使用 -a,不过要谨慎,因为这可能涉及缓存、构建产物甚至本地配置文件。

日常开发通常使用 -u 就足够了。

三、查看保存过的记录

执行:

git stash list

可能看到:

stash@{0}: On main: 保存当前修改
stash@{1}: On dev: 临时保存登录功能修改

stash@{0} 一般表示最新保存的一条记录。

想查看某条记录具体修改了什么,可以执行:

git stash show -p

默认查看最新记录。

如果使用 Windows PowerShell,可以给指定的 stash 引用加上引号:

git stash show -p 'stash@{1}'

这样能避免特殊字符在 Shell 中被错误处理。

四、apply 和 pop 有什么区别?

恢复修改时,最常用的是两个命令。

git stash apply

apply 会把最新的暂存修改应用到当前工作区,但保留 stash 记录。

而:

git stash pop

pop 会尝试恢复修改,成功后删除对应的 stash 记录。

简单理解:

  • apply:恢复修改,保留记录。
  • pop:恢复修改,成功后清理记录。

如果恢复时出现冲突,pop 通常不会删除对应的 stash 记录,需要手动解决冲突。

如果保存的修改比较重要,建议先使用 apply,检查结果没问题后再考虑删除暂存记录。

五、如何删除不需要的 stash?

删除最新的一条:

git stash drop

也可以指定记录:

git stash drop 'stash@{1}'

如果要清空全部 stash:

git stash clear

需要特别注意,clear 会删除所有 stash 记录,之后可能无法恢复,不建议随意执行。

六、实际使用场景:修改到一半,需要同步远程仓库

例如,正在 main 分支修改代码,但还没准备提交,此时想拉取远程更新。

可以先查看状态:

git status

保存当前修改:

git stash push -u -m "同步前保存修改"

然后拉取远程代码:

git pull --ff-only

这里使用 --ff-only,是为了避免拉取过程中自动产生额外的合并提交。如果当前分支无法快进更新,命令会直接失败,需要另外处理分支历史。

成功更新后恢复:

git stash apply

再查看状态:

git status

确认修改正常恢复,且不再需要保留暂存记录后,可以执行:

git stash drop

需要注意,stash 并不能保证恢复时一定没有冲突。如果远程更新恰好修改了同一段代码,恢复时仍然可能需要手动解决冲突。

七、几个容易忽略的细节

第一,stash 不等于永久保存。重要修改最好还是通过正常 commit 或其他可靠方式进行备份。

第二,stash 可以跨分支恢复,但修改内容不一定能无冲突地应用到另一个分支。

第三,stash 默认不会包含所有未跟踪和忽略文件。执行前可以用 git status 确认实际修改了哪些内容。

第四,stash 还支持只保存特定路径或者交互式选择修改部分。项目比较大时,可以根据需要使用这些功能,避免保存无关文件。

总结

Git stash 适合临时中断当前开发工作的情况,最常用的命令其实只有几个:

git stash push -u -m "临时保存"
git stash list
git stash show -p
git stash apply
git stash pop
git stash drop

日常使用时,建议养成两个习惯:保存时写清楚说明,恢复时先检查工作区状态。

这样即使需要频繁切换分支或者同步远程更新,也不用为了保存未完成的修改而创建大量临时 commit。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。