当前位置: 首页 > news >正文

Git Stash 与本地 Commit 有什么区别?

对比项git stashgit commit(不 push)
主要用途临时切分支、临时处理中断稳定保存一个开发阶段
是否属于分支历史不属于分支提交历史属于当前分支历史
是否上传远端不会不会,除非执行git push
下次恢复git stash apply/popgit switch 分支名
恢复顺序依赖stash@{0}等动态序号通过分支和提交哈希固定定位
冲突风险应用到变化后的代码时容易冲突切回原分支通常直接恢复完整状态
未跟踪文件默认不保存,需要-ugit add后可以提交
查看改动相对不直观可通过git log/show/diff清晰查看
保存可靠性适合短期,不适合长期堆放更适合长期、稳定保存
是否方便撤销可以drop可用resetrevertrebase等处理

Git Stash

Git Stash:Temporary storage(临时保存),它更像是一个临时储物柜

Git 会做两件事情:

  1. 把当前修改打包成一个特殊的 Commit;
  2. 恢复工作区到干净状态。

基本操作:

// 暂存当前的更改文件 git stash push -u -m "临时保存布局修改" // 切换回分支需要恢复切换前的数据 git stash pop

git stash push -u -m "临时保存布局修改"作用:

  • 暂时保存已跟踪文件修改。
  • -u同时保存未跟踪文件。
  • 保存后清理工作区,方便切换分支。

恢复:

1.只恢复,不删除 stash

git stash apply stash@{0}

2. 恢复成功后删除 stash;发生冲突时通常保留。

git stash pop stash@{0}

优点:

  • 快速清空工作区。
  • 不会产生临时开发提交。
  • 适合修改只需要放几分钟或几小时的情况
  • 适合临时处理线上问题后马上回来继续

缺点:

  • stash 是整个仓库共用的列表,不真正绑定某个分支
  • stash@{0}会随着新增、删除 stash 而改变。
  • 多份 stash 堆在一起后容易恢复错
  • 默认不包含未跟踪文件。
  • 长时间保存后不容易知道每份 stash 的具体内容。
  • 在代码基线变化后恢复,容易出现冲突。
  • dropclear后恢复更麻烦,不适合作为长期备份。

如果某天切回的暂存不是上次最新的更改怎么办

整个恢复过程其实可以概括为四个步骤:

  1. 确认目标:通过git stash list找到需要恢复的 Stash,并确认其中包含自己需要的文件。
  2. 确认环境:检查当前分支、工作区状态以及 Stash 的创建基准,确保恢复不会引入不必要的冲突。
  3. 先备份再恢复:恢复之前,先将当前工作区再次stash一份作为保险,然后使用git stash apply恢复目标 Stash,而不是直接使用pop
  4. 恢复后验证:通过git diffgit stash list验证恢复结果,确认代码已恢复,同时原始 Stash 和备份 Stash 都仍然保留。
指令作用
git status --short --branch --untracked-files=all确认当前所在分支,并查看工作区所有修改(包括未跟踪文件)
git stash list --date=local查看所有 stash 及创建时间,确认目标 Stash
git show --stat --oneline --summary "stash@{0}"查看目标 Stash 包含哪些已跟踪文件,而不恢复代码
git stash show --include-untracked --name-status "stash@{0}"检查 stash 中的未跟踪文件
git diff --name-status a92c5xxx比较当前工作区与目标 stash
git log -5 --oneline --decorate查看当前分支最近几次提交,确认 HEAD 所在位置
git show -s --format="..." a92c5xxx查看 Stash 的元信息,包括它基于哪个提交创建
git stash push --include-untracked -m "自动备份:恢复 2026-07-21 19:04:51 前"在恢复旧 Stash 之前,先备份当前工作区的所有修改和未跟踪文件
git stash apply --index a92c527d9f680xxxx...根据指定哈希恢复昨天的 Stash,并恢复原来的暂存状态(Stage)
git diff --name-status a92c5xxx...恢复后再次比较;没有输出,说明已跟踪文件与目标 stash 完全一致
git stash list --date=local确认上次的原 stash 和今天的自动备份都还在

git commit ,但不push

基本操作:此时提交只存在本地,不会自动上传 GitLab/GitHub。

git add src/layout git commit -m "feat(layout): 保存导航布局改版进度"

切换到其他分支:

git switch master

下次切回继续做

git switch layout_test

优点:

  • 修改明确保存在layout_test分支上。
  • 提交哈希固定,不受 stash 序号变化影响。
  • 切回分支就是完整代码,不需要重新 apply/pop。
  • 可以清晰查看每次保存的内容:
git log --oneline git show 提交哈希
  • 可以继续修改、合并、拆分、撤销。
  • 在没有 push 前,可以使用commit --amend或交互式 rebase 整理提交。

缺点:

  • 会产生提交记录,临时保存过于频繁时历史可能零碎。
  • 后续推送前可能需要整理 WIP 提交。
  • 如果误提交.env.local、密码或本地配置,之后直接 push 会一起上传。
  • 只保存在本机,电脑或磁盘损坏仍可能丢失;它不是远程备份。
http://www.jsqmd.com/news/1249215/

相关文章:

  • ARM Cortex-M4F异常屏蔽与双栈机制:FAULTMASK、BASEPRI、CONTROL寄存器实战解析
  • ChatGPT重大改版!Work与Codex模式区别,90%的人都用错了
  • 两台linux 服务器同步修改的文件
  • Github项目分享——免费的编程中文书籍索引
  • 7.3 工具类型与能力框架《AI智能体应用开发》
  • 2026 杭州奢侈品回收探店实测,避坑干货 + 正规门店全汇总 - 奢侈品回收机构参考
  • B+Tree深度剖析: 高度为3的B+Tree能存多少条MySQL数据?(含计算过程)
  • CNN-Mamba-UNet融合架构在医学图像分割中的创新应用
  • 2026潍坊不锈钢风机厂家哪家好,大尺寸风机厂家推荐怎么选?源头厂家推荐与实用选购指南 - mobible
  • 文件归档统一管理软件的选型困境:功能越全,落地越难
  • DailyTech-20260722
  • MCP与Skill技术:AI任务执行的革命性突破
  • 数据库设计:从单机到分布式
  • 2026在线考试平台搭建服务商前十到底有谁在啊?
  • 【2027最新】基于SpringBoot+Vue的协同过滤电影推荐系统管理系统源码+MyBatis+MySQL
  • 大厂HR面被问拿到国内其他 Offer?用竞品梯队比较话术得体回应「蒸汽求职分享」
  • 同城O2O系统开发实践:本地生活服务如何提升匹配、调度与履约效率
  • 麒麟信安“一云多芯”信创云桌面解决方案入围2020年信息技术应用创新解决方案典型案例名单
  • 迪奥包包回收2026年保定须知 毓典寄卖行本地奢侈品回收门店 - 毓典寄卖行
  • 山东平价风机厂家推荐,镀铝锌风机厂家哪家好?2026避坑指南:4个坑+5条硬标准,帮你选对不花冤枉钱 - mobible
  • docker omv 防火墙_我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能...
  • Spring Boot启动过程: 从new SpringApplication到run(),这中间到底发生了什么?
  • 【单片机毕业设计推荐】 基于 STM32 或 51 单片机的智能感应自动门控制系统设计与实现,基于 STM32 或 51 单片机的带人数统计功能智能门禁装置设计(012403)
  • 零基础自学攻防 11 大步骤,网络安全新手入门至精通全方位干货分析,学习网安留存这一篇即可
  • IPv6相关知识(smb/ssh/scp/浏览器访问)及碰到的坑
  • 国产军事仿真平台如何突破AFSIM二次开发与分布式仿真瓶颈 - 品研笔录
  • 塑料挤出制杯一体化设备怎么选?别只看参数,先搞清工艺匹配、成本结构和交付边界 - 中国品牌价值观察网
  • openwrt软路由(x86-64 koolshare mod)下利用Docker部署guacamole
  • 集团数据质量管控体系建设(数据治理)
  • 下载软件 (三) openocd 的编译