Git Stash实战——临时保存工作进度的终极指南

Git Stash实战——临时保存工作进度的终极指南

一、什么是git stash?


git stash的作用是将当前工作区和暂存区中尚未提交的修改保存到堆栈中,让工作区恢复到“干净状态”(与最近一次提交一致)。

核心价值
不会污染提交历史:stash保存在特殊的堆栈区域,不会出现在git log中

更精细的存储控制:可以选择只存储工作区变更或同时存储暂存区

多进度管理能力:支持保存多个工作进度并通过索引管理

二、基础用法


2.1 暂存当前修改

# 基本用法(保存所有未提交的修改) git stash # 带描述信息(推荐) git stash save "正在开发登录功能,未完成" # Git 2.13+ 简写 git stash push -m "修复登录页面的样式"


效果:将工作区和暂存区的修改保存到栈中,恢复工作目录到最后一次提交的状态。

2.2 查看暂存列表

git stash list stash@{0}: WIP on master: abc1234 添加新功能 stash@{1}: On feature: xyz5678 修复样式问题


2.3 恢复暂存的修改

# 恢复最近一次暂存(保留暂存记录) git stash apply # 恢复并删除暂存记录 git stash pop # 恢复指定暂存 git stash apply stash@{1} git stash pop stash@{2}


区别:apply恢复后保留暂存记录,pop恢复后删除暂存记录-36。

2.4 删除暂存记录

# 删除指定暂存 git stash drop stash@{1} # 清空所有暂存 git stash clear


三、实战场景


场景1:切换分支前保存工作

# 当前在feature分支工作,未完成但需要切换到master git stash save "feature分支未完成代码" # 切换到master处理紧急事务 git checkout master # 处理完紧急事务 # 切回feature分支恢复工作 git checkout feature git stash pop


场景2:误在错误分支上开发

# 错误:在master上开发了新功能 # 保存当前修改 git stash # 切换到正确的分支 git checkout feature # 恢复修改 git stash pop


场景3:多次stash的管理

# 第一次暂存 git stash save "功能A开发一半" # 第二次暂存(在功能A的基础上继续开发) git stash save "功能A继续开发" # 查看所有暂存 git stash list # 恢复第二次暂存 git stash pop stash@{0} # 恢复第一次暂存(需要先提交第二次的修改) git stash pop stash@{1}


四、高阶技巧


4.1 只暂存工作区(保留暂存区)

git stash --keep-index


使用场景:已经git add了部分文件准备提交,但工作区还有未完成的修改不想提交。

4.2 包含未跟踪文件


默认情况下,git stash不会保存未跟踪文件(如新创建但未git add的文件)。

# 包含未跟踪文件 git stash -u # 包含未跟踪文件并忽略.gitignore git stash -a


4.3 交互式暂存(只暂存部分修改)

# 交互式选择要暂存的修改块 git stash -p


Git会按hunk(块)展示修改,让你逐块选择:

y:收起当前块

n:跳过当前块

s:把当前块继续拆小

e:手动编辑当前块

4.4 基于stash创建分支


使用场景:stash的修改与当前分支差异较大,直接apply可能产生冲突。

4.5 查看stash内容

# 查看最近一次暂存的摘要 git stash show # 查看完整补丁内容 git stash show -p # 查看指定暂存 git stash show stash@{1}


五、常见踩坑提醒

问题解决方案
新建文件未add,直接stash丢失先git add,或用git stash -u
pop后产生冲突手动解决冲突,或使用apply先预览
stash太多难以管理每次save时加描述信息
长期保留修改建议创建分支并提交,而非依赖stash


六、总结


git stash是Git工作流中不可或缺的工具-。掌握它,你就能在开发过程中随时切换上下文,而不必担心丢失未完成的工作。

核心命令速查:

操作命令
暂存修改git stash / git stash save "描述"
查看列表git stash list
恢复(保留)git stash apply
恢复(删除)git stash pop
删除记录git stash drop
清空所有git stash clear

感谢浏览,希望这篇博客对你有所帮助~(^ - ^)~