用 git stash 临时保存未完成改动

6 人参与

改到一半的代码,突然要去别的分支救个急——这大概是写代码的人最常遇到的尴尬。手里这活儿没干完,提交吧,半个功能放上去不像话;不提交吧,一切分支,改动跟着乱成一团。这时候老手通常会甩一句:先 stash 一下。

用 git stash 临时保存未完成改动

git stash 可以理解成给桌面腾地方。把当前还没提交的改动卷起来塞进抽屉,工作区立刻变干净,你就能安心切分支、拉代码、处理别的事,回头再把抽屉拉开,东西原样摆回来。整个过程不产生提交记录,也不打扰分支历史,所以它特别适合放那种"几小时后还要接着干"的半成品。

它是个抽屉,不是档案柜

关键在于"临时"两个字。stash 里的东西不属于任何一次提交,只在本地仓库挂着一条记录。见过太多抽屉里塞了七八条、备注一条没写的情况,过两周自己都分不清哪条是哪条。存的时候顺手加一句说明,取之前先列一遍清单看看都有什么,这两步花不了几秒,能省掉后面一堆猜谜。

取回也有两种方式,听着差不多,实际差别不小:一种取回来顺手把记录删掉,干净利落;另一种取回来但原记录还留着,稳妥些。前者用起来爽,可一旦取回时撞上冲突,手忙脚乱之际想退回原状就难了。拿不准的时候,选后者。

还有一个不显眼的细节:stash 通常只管已经被 Git 跟踪的文件。你新写了个文件、还没加进去,stash 的时候它多半原地不动,切分支时可能跟着你跑到别的分支上,回头一看莫名其妙多出个文件。这个坑不常踩,踩了很费解。

什么时候不该用它

判断标准其实很简单:如果这堆改动已经是一个完整的小步骤,哪怕不够漂亮,提交到自己的临时分支反而更安全——有历史、有记录、能回滚、能对比。stash 更像一张"我马上回来"的便条,不是长期存档的地方。

风险也得说清楚。stash 是纯本地的,机器出问题、仓库被清理、误操作删掉,都可能让里面的东西彻底消失,而且它不会提醒你。真拿不准的改动,把文件复制一份到项目目录外,比什么技巧都实在。

说到底,git stash 解决的是"手头这事被打断"的即时需求。用之前想清楚这堆改动值不值得留、留多久、怎么取回来,用起来才不会变成抽屉里的糊涂账。

参与讨论

6 条评论
  • 云海翻腾

    每次stash前都习惯性列个清单,不然过两天真就忘了哪个是哪个

  • 白露子

    临时分支比stash靠谱多了,至少git log还能看到改了什么

  • DreadMist

    取回冲突那个场景想想就头大,一般我都选保留记录的方式,求个心安

  • 泥瓦匠老陶

    加-u参数能存未跟踪文件,不过确实如作者说的容易乱,还是老老实实提交吧

  • 红枣拿铁

    那个新文件没被跟踪会跟着切分支的坑太真实了,刚踩过一次差点怀疑人生

❯
个人中心
购物车
优惠劵
有新私信 私信列表
搜索