用 git stash 临时保存未完成改动
Git 初学者如何撤销工作区修改并保留暂存内容
改到一半的代码,突然要去别的分支救个急——这大概是写代码的人最常遇到的尴尬。手里这活儿没干完,提交吧,半个功能放上去不像话;不提交吧,一切分支,改动跟着乱成一团。这时候老手通常会甩一句:先 stash 一下。

git stash 可以理解成给桌面腾地方。把当前还没提交的改动卷起来塞进抽屉,工作区立刻变干净,你就能安心切分支、拉代码、处理别的事,回头再把抽屉拉开,东西原样摆回来。整个过程不产生提交记录,也不打扰分支历史,所以它特别适合放那种"几小时后还要接着干"的半成品。
它是个抽屉,不是档案柜
关键在于"临时"两个字。stash 里的东西不属于任何一次提交,只在本地仓库挂着一条记录。见过太多抽屉里塞了七八条、备注一条没写的情况,过两周自己都分不清哪条是哪条。存的时候顺手加一句说明,取之前先列一遍清单看看都有什么,这两步花不了几秒,能省掉后面一堆猜谜。
取回也有两种方式,听着差不多,实际差别不小:一种取回来顺手把记录删掉,干净利落;另一种取回来但原记录还留着,稳妥些。前者用起来爽,可一旦取回时撞上冲突,手忙脚乱之际想退回原状就难了。拿不准的时候,选后者。
还有一个不显眼的细节:stash 通常只管已经被 Git 跟踪的文件。你新写了个文件、还没加进去,stash 的时候它多半原地不动,切分支时可能跟着你跑到别的分支上,回头一看莫名其妙多出个文件。这个坑不常踩,踩了很费解。
什么时候不该用它
判断标准其实很简单:如果这堆改动已经是一个完整的小步骤,哪怕不够漂亮,提交到自己的临时分支反而更安全——有历史、有记录、能回滚、能对比。stash 更像一张"我马上回来"的便条,不是长期存档的地方。
风险也得说清楚。stash 是纯本地的,机器出问题、仓库被清理、误操作删掉,都可能让里面的东西彻底消失,而且它不会提醒你。真拿不准的改动,把文件复制一份到项目目录外,比什么技巧都实在。
说到底,git stash 解决的是"手头这事被打断"的即时需求。用之前想清楚这堆改动值不值得留、留多久、怎么取回来,用起来才不会变成抽屉里的糊涂账。



参与讨论
每次stash前都习惯性列个清单,不然过两天真就忘了哪个是哪个
临时分支比stash靠谱多了,至少git log还能看到改了什么
取回冲突那个场景想想就头大,一般我都选保留记录的方式,求个心安
加-u参数能存未跟踪文件,不过确实如作者说的容易乱,还是老老实实提交吧
那个新文件没被跟踪会跟着切分支的坑太真实了,刚踩过一次差点怀疑人生