储藏工作进度
经常有这样的情况:你正在某个分支上开发,代码写了一半,突然需要切换到别的分支处理紧急事务。此时的代码还不适合提交,怎么办?git stash 可以把当前未提交的修改临时"储藏"起来,让工作区恢复干净。
储藏修改
git stash
# Saved working directory and index state WIP on main: a1b2c3d 添加登录页面执行后,工作区和暂存区的修改都被保存起来,工作区回到最近一次提交的状态,你可以放心地切换分支了。
建议为每次储藏添加说明,方便以后识别:
git stash push -m "登录页面样式调整到一半"储藏的范围
默认情况下,git stash 只储藏已跟踪文件的修改:
# 同时储藏未跟踪的新文件
git stash -u
# 连同被忽略的文件一起储藏
git stash -a
# 只储藏指定文件
git stash push -m "只存样式" src/style.css
# 交互式选择要储藏的修改块
git stash -p查看储藏列表
git stash list
# stash@{0}: On main: 登录页面样式调整到一半
# stash@{1}: WIP on feature: e4f5g6h 添加接口stash@{0} 是最近一次的储藏。
查看某个储藏的具体内容:
git stash show stash@{1}
git stash show -p stash@{1}恢复储藏
# 恢复最近一次储藏,并从列表中删除
git stash pop
# 恢复最近一次储藏,但保留在列表中
git stash apply
# 恢复指定的储藏
git stash apply stash@{1}储藏可以在任何分支上恢复,不一定要回到原来的分支。如果恢复时与当前修改冲突,需要像处理合并冲突一样解决。
删除储藏
# 删除指定储藏
git stash drop stash@{1}
# 清空所有储藏
git stash clear从储藏创建分支
如果储藏后原分支有了新的修改,导致恢复时冲突,可以直接基于储藏时的提交创建一个新分支:
git stash branch new-feature stash@{0}典型场景
# 在 feature 分支开发到一半
git stash push -m "功能开发中"
# 切到 main 修复紧急问题
git switch main
git switch -c hotfix
# ... 修复并提交 ...
# 回到 feature 继续
git switch feature
git stash pop提示
储藏适合短期使用。如果一段工作需要搁置较长时间,更好的做法是提交到一个临时分支,以免在储藏列表里遗忘。