Git Stash 用法详解:把未完成的工作先“藏起来”

前言

写代码时经常遇到这种情况:

  • 正在改一个功能,突然来了紧急 bug 要修
  • 想临时切换分支去看别人的代码
  • 本地改了一堆文件,但还不想提交

这时候如果直接 git checkoutgit pull,Git 会报错,说你有未提交的修改。

Git Stash 就是专门解决这个问题的工具——它能把你当前工作区的修改临时“藏”起来,让工作区变得干净,等你处理完其他事情后再把修改取回来。

下面用最通俗的方式讲清楚它的用法,并配上可直接复制运行的示例。

1. 最常用的基本操作

把当前修改藏起来

git stash

或者带上说明(推荐):

git stash save "临时修改:登录页面样式还没调完"

执行后,你的工作区和暂存区会变得干净,所有未提交的修改都被存到了 stash 里。

查看已经藏了哪些东西

git stash list

输出类似:

stash@{0}: On main: 临时修改:登录页面样式还没调完
stash@{1}: On main: 紧急修复前的半成品

数字越小表示越新。

把修改取回来(两种方式)

方式一:取出并删除这条记录(最常用)

git stash pop

相当于“取出来 + 扔掉这条记录”。

方式二:只取出,但保留记录

git stash apply

适合你想多次应用同一份修改的情况。

如果有多条记录,可以指定哪一条:

git stash pop stash@{1}
git stash apply stash@{0}

2. 实际工作中的典型场景

场景 1:紧急修复 bug

# 正在开发新功能,工作区有一堆未提交修改
git status

# 先把修改藏起来
git stash save "新功能开发到一半"

# 切换到稳定分支修 bug
git checkout main
# ... 修 bug、提交 ...

# 修完后切回原来的分支
git checkout feature/login

# 把之前藏的修改取回来继续干
git stash pop

场景 2:想临时看一下别的分支代码

git stash
git checkout other-branch
# 随便看看
git checkout -
git stash pop

场景 3:只想藏部分文件(不是全部)

# 先把想保留的文件暂存
git add src/login.js

# 只把未暂存的修改藏起来
git stash --keep-index

或者用交互式选择:

git stash -p

会一个一个问你要不要 stash 这个改动。

3. 进阶但很实用的命令

命令 作用 示例
git stash show 查看某条 stash 改了什么 git stash show -p stash@{0}
git stash drop 删除某条记录 git stash drop stash@{1}
git stash clear 清空所有 stash(慎用) git stash clear
git stash branch 从某条 stash 直接创建新分支 git stash branch temp-branch stash@{0}
git stash -u 把未跟踪的新文件也一起藏起来 git stash -u
git stash -a 连 ignored 文件也一起藏 git stash -a

特别推荐

# 想把未跟踪的新文件也一起藏起来(很常见)
git stash -u

4. 几个容易踩坑的点

  1. stash 默认不包含未跟踪文件
    新创建的文件如果不 git add,用普通 git stash 是藏不了的,需要加 -u

  2. 冲突处理
    popapply 时如果和当前代码冲突,Git 会提示冲突,需要手动解决后才能继续。

  3. stash 不是永久备份
    虽然它存在本地,但还是建议重要修改尽早正式提交。git stash clear 或重新 clone 都会让它消失。

  4. 想给 stash 改名
    Git 本身不支持直接改名,但可以用:

    git stash store -m "新的说明" $(git rev-parse stash@{0})
    git stash drop stash@{1}   # 把旧的删掉
    

5. 推荐的日常工作流

# 1. 开始工作时先看看有没有残留的 stash
git stash list

# 2. 临时需要切分支或修 bug
git stash save "当前工作进度说明"

# 3. 处理完其他事后
git stash pop

# 4. 如果 pop 产生冲突,解决完再提交
git add .
git commit -m "继续完成之前的功能"

总结

  • git stash = 把工作区修改临时藏起来
  • git stash list = 看看藏了哪些
  • git stash pop = 取出来并删除记录(最常用)
  • git stash apply = 只取出来,保留记录
  • 记得加 -u 才能把新文件一起藏起来

掌握这几个命令后,你再也不用因为“有未提交修改”而烦恼了。工作区随时可以保持干净,需要的时候再把进度拿回来继续。

试试看,你会发现它是 Git 里最实用的命令之一。

posted @ 2026-09-03 09:38  牛奔  阅读(9)  评论(0)    收藏  举报