返回知识库

版本协作 · 版本协作

暂存修改Stash

stash 把未提交改动压进本地临时栈,工作区变干净后才能安全切分支;回来再 pop 或 apply 取回,它不进历史也不在远程。

先认出这只搁置架,再决定能不能切分支

下面就是工作区和 stash 架子。默认改动已压栈、工作区干净;pop 遇到底层移动会冲突,但架子上的条目还在;解决后才能取回并出栈。

第 0 步先打开:终端跑 git stash list,或看编辑器 Source Control 的 Stash。下面是工作区和那只架子。

工作区可切分支

干净 · login.tsx 已不在这里

搁置架在架上

stash@{0}登录页未完成的错误态login.tsx · form.css

已 push · 工作区干净

改动压进 stash@{0}。可以安全切去修线上。回来再 pop。

原因:未提交改动会挡住切分支。下一步:看 pop 遇到底层移动会怎样失败,或直接取回。

知识点:临时栈,不是 checkpoint

架子和工作区刚演过的四件事。

  • stash 是 LIFO 栈:push 入栈让工作区变干净,pop 取回并出栈。
  • apply 取回但留栈;drop 只丢弃栈顶。
  • 它不进历史、不在远程;untracked 要 -u 才会被搁置。
  • 底层分支动过再 pop,可能冲突;失败时 stash 保留,方便重试。

什么时候用、怎么用

切上下文救急,不要当备份盘。

  • 信号:手上有未完成改动,却必须立刻切分支修线上。
  • 最短路径:git stash push -u -m 说明 → 确认 status 干净再切 → 回来 stash show -p 再 pop。
  • 不适用:要跨设备或长期保存,就 commit 到 WIP 分支,别把 stash 堆成仓库。

正反例:同一处登录改动,搁置方式不同

都要切去修线上,只改有没有说明和 -u。

正例push -u -m 写清登录页错误态

untracked 的 notes.md 也进栈。回来能认出这层,pop 后跑测试。

反例裸 stash,当长期备份

栈上堆着无名条目,换电脑找不到;冲突时还以为条目丢了。

快速自测

切去修线上之前,工作区有 login.tsx 和未跟踪的 notes.md。怎样搁置才安全?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。