Git stash 使用指南:临时保存修改与恢复工作现场
前言
使用 Git 开发项目时,经常会遇到代码只改了一半,却需要临时切换分支、拉取远程更新或者处理其他问题的情况。
这时直接提交一个未完成的 commit 不太合适,放弃修改又舍不得。Git 提供的 stash 功能正好可以解决这个问题:先把当前修改临时保存起来,等处理完其他事情后再恢复。
一、Git stash 是什么?
stash 可以把工作区和暂存区的修改保存到 Git 的临时记录中,并让工作区恢复到相对干净的状态。
最简单的使用方式:
git stash
不过实际开发中,更建议给记录添加说明:
git stash push -m "临时保存登录功能修改"
这样以后查看暂存列表时,就能知道每条记录保存了什么。
需要注意,stash 不是提交到当前分支的普通 commit,也不会自动同步到远程仓库,不适合代替长期备份。
二、为什么新建的文件没有保存?
这是一个常见问题。
默认情况下,git stash 主要保存已跟踪文件的修改。对于刚创建、尚未加入 Git 跟踪的文件,可能不会一起保存。
如果希望把未跟踪文件也包含进去,可以使用:
git stash push -u -m "保存当前修改"
其中 -u 表示包含未跟踪文件,但不会包含被 Git 忽略的文件。
如果还需要保存被忽略的文件,可以使用 -a,不过要谨慎,因为这可能涉及缓存、构建产物甚至本地配置文件。
日常开发通常使用 -u 就足够了。
三、查看保存过的记录
执行:
git stash list
可能看到:
stash@{0}: On main: 保存当前修改
stash@{1}: On dev: 临时保存登录功能修改
stash@{0} 一般表示最新保存的一条记录。
想查看某条记录具体修改了什么,可以执行:
git stash show -p
默认查看最新记录。
如果使用 Windows PowerShell,可以给指定的 stash 引用加上引号:
git stash show -p 'stash@{1}'
这样能避免特殊字符在 Shell 中被错误处理。
四、apply 和 pop 有什么区别?
恢复修改时,最常用的是两个命令。
git stash apply
apply 会把最新的暂存修改应用到当前工作区,但保留 stash 记录。
而:
git stash pop
pop 会尝试恢复修改,成功后删除对应的 stash 记录。
简单理解:
- apply:恢复修改,保留记录。
- pop:恢复修改,成功后清理记录。
如果恢复时出现冲突,pop 通常不会删除对应的 stash 记录,需要手动解决冲突。
如果保存的修改比较重要,建议先使用 apply,检查结果没问题后再考虑删除暂存记录。
五、如何删除不需要的 stash?
删除最新的一条:
git stash drop
也可以指定记录:
git stash drop 'stash@{1}'
如果要清空全部 stash:
git stash clear
需要特别注意,clear 会删除所有 stash 记录,之后可能无法恢复,不建议随意执行。
六、实际使用场景:修改到一半,需要同步远程仓库
例如,正在 main 分支修改代码,但还没准备提交,此时想拉取远程更新。
可以先查看状态:
git status
保存当前修改:
git stash push -u -m "同步前保存修改"
然后拉取远程代码:
git pull --ff-only
这里使用 --ff-only,是为了避免拉取过程中自动产生额外的合并提交。如果当前分支无法快进更新,命令会直接失败,需要另外处理分支历史。
成功更新后恢复:
git stash apply
再查看状态:
git status
确认修改正常恢复,且不再需要保留暂存记录后,可以执行:
git stash drop
需要注意,stash 并不能保证恢复时一定没有冲突。如果远程更新恰好修改了同一段代码,恢复时仍然可能需要手动解决冲突。
七、几个容易忽略的细节
第一,stash 不等于永久保存。重要修改最好还是通过正常 commit 或其他可靠方式进行备份。
第二,stash 可以跨分支恢复,但修改内容不一定能无冲突地应用到另一个分支。
第三,stash 默认不会包含所有未跟踪和忽略文件。执行前可以用 git status 确认实际修改了哪些内容。
第四,stash 还支持只保存特定路径或者交互式选择修改部分。项目比较大时,可以根据需要使用这些功能,避免保存无关文件。
总结
Git stash 适合临时中断当前开发工作的情况,最常用的命令其实只有几个:
git stash push -u -m "临时保存"
git stash list
git stash show -p
git stash apply
git stash pop
git stash drop
日常使用时,建议养成两个习惯:保存时写清楚说明,恢复时先检查工作区状态。
这样即使需要频繁切换分支或者同步远程更新,也不用为了保存未完成的修改而创建大量临时 commit。
- 点赞
- 收藏
- 关注作者
评论(0)