git stash 的使用
git stash
是 Git 中一个非常实用的功能,用于临时保存和恢复工作目录中尚未提交的修改。当你需要切换分支、处理紧急修复,但又不想提交当前未完成的工作时,git stash
就能派上用场。
基本用法
1. 暂存当前修改
git stash save "可选的描述信息" # 保存当前工作区和暂存区的修改
# 或简化写法(Git 2.13+)
git stash
- 效果:将工作区和暂存区的修改保存到栈中,并恢复工作目录到最后一次提交的状态。
2. 查看暂存列表
git stash list # 显示所有暂存记录
# 输出示例:
# stash@{0}: WIP on master: abc1234 添加新功能
# stash@{1}: On feature: xyz5678 修复样式问题
3. 恢复暂存的修改
git stash apply # 恢复最近一次暂存(stash@{0})
git stash apply stash@{1} # 恢复指定暂存记录(如第2条)
- 区别:
apply
恢复后保留暂存记录,pop
恢复后删除暂存记录。
4. 恢复并删除暂存记录
git stash pop # 恢复并删除最近一次暂存
git stash pop stash@{2} # 恢复并删除指定暂存
5. 删除暂存记录
git stash drop stash@{0} # 删除指定暂存
git stash clear # 删除所有暂存
进阶用法
只暂存工作区(不暂存已添加到暂存区的修改)
git stash --keep-index # 保留暂存区的修改
只暂存部分文件
git add file1.js file2.js # 先将需要保留的文件添加到暂存区
git stash --patch # 交互式选择需要暂存的修改
创建分支基于暂存
git stash branch new-feature # 从最近一次暂存创建新分支并恢复修改
常见场景
场景1:切换分支前保存工作
# 当前在 feature 分支工作,未完成但需要切换到 master
git stash # 保存当前修改
git checkout master
# 处理完 master 后回到 feature
git checkout feature
git stash pop # 恢复修改
场景2:紧急修复(Hotfix)
# 在开发新功能时收到紧急修复请求
git stash # 保存当前工作
git checkout master
git checkout -b hotfix
# 修复完成并提交
git checkout master
git merge hotfix
git branch -d hotfix
# 回到开发分支
git checkout feature
git stash pop # 继续开发
注意事项
- 暂存记录存储在本地仓库:不会推送到远程仓库,其他开发者无法访问。
- 冲突处理:如果恢复暂存时发生冲突,需要手动解决冲突。
- 查看暂存差异:
git stash show # 查看最近一次暂存的摘要 git stash show -p # 查看完整补丁内容
- 长期保存建议:如果需要长期保留修改,建议创建分支并提交,而非依赖
stash
。
替代方案
- 创建临时提交:
git commit -m "WIP: 临时提交" # 临时提交 git reset --soft HEAD~1 # 需要恢复时撤销提交
git stash
是一个高效的临时工作管理工具,掌握它能让你的 Git 工作流更加流畅。