三分钟学会用 Git stash 暂存手头工作再切换分支

举报
yd_293701066 发表于 2026/11/12 11:25:20 2026/11/12
【摘要】 正在写代码,突然要切到另一个分支修一个紧急问题,手头改了一半的代码怎么办?先提交吧,改到一半没法提交;直接切换吧,Git 会报错。Git stash 就是为这个场景准备的:把未提交的改动先暂存起来,工作区恢复干净,等处理完再取回来。 一、基本用法:三条命令第一步,把当前改动暂存起来:git stash第二步,确认工作区已经干净,可以放心切换分支:git statusgit checkout ...

正在写代码,突然要切到另一个分支修一个紧急问题,手头改了一半的代码怎么办?先提交吧,改到一半没法提交;直接切换吧,Git 会报错。Git stash 就是为这个场景准备的:把未提交的改动先暂存起来,工作区恢复干净,等处理完再取回来。

一、基本用法:三条命令

第一步,把当前改动暂存起来:

git stash

第二步,确认工作区已经干净,可以放心切换分支:

git status
git checkout hotfix-branch

第三步,紧急问题处理完,切回原来的分支,把暂存的改动取回来:

git checkout feature-branch
git stash pop

git stash pop 会把最近一次暂存的改动恢复到工作区,同时删除这条暂存记录。

二、给暂存起个名字

只用 git stash 时,暂存记录默认没有名字,攒多了容易分不清。养成加说明的习惯:

git stash push -m "重构登录表单,做到一半"

查看暂存列表:

git stash list

列表里会看到类似 stash@{0}: On feature-branch: 重构登录表单,做到一半 的记录。

三、只取回某一条暂存

暂存了多条时,不用按顺序取,可以指定编号:

git stash pop stash@{1}

如果只想看一眼某条暂存里改了什么,还没决定要不要取回,先看差异:

git stash show -p stash@{0}

确认无误再取回。取回后如果代码冲突,Git 会像处理合并冲突一样标出冲突位置,逐个解决后再提交。

四、两个容易踩的坑

第一,git stash 默认只暂存已跟踪文件的改动,新建的、还没有 git add 过的文件不会被暂存。新建文件也想一起暂存,加 -u 参数:

git stash -u

第二,git stash pop 恢复后如果产生冲突,暂存记录不会自动删除。解决冲突并确认代码没问题后,再手动清理:

git stash drop

不想保留任何暂存时,可以清空全部记录,但这一步不可恢复,执行前先用 git stash list 确认。

五、什么时候不用 stash

如果手头的改动已经成型,只是还没写完测试,提交一个临时提交再切换分支也可以,回来之后用 git commit --amend 继续完善。stash 更适合“改动还没到能提交的程度、只是临时让路”的场景。

小结:改一半要切分支,先 git stash 暂存,切回来再 git stash pop 取回;多条暂存就加 -m 起名字,用 git stash list 查看。把这个习惯养成,分支切换就再也不会被未提交的改动卡住了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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