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

git stash临时保存工作区

        通过git stash 可以灵活管理临时修改,保持工作区整洁,是多人协作或多任务切换时的常用工具,主要用于临时保存工作区和暂存区修改的命令,常用于以下场景:

(1)需要切换分支,但不想立即提交当前修改;

(2)临时拉取或合并远程代码,避免冲突;

(3)调试时保存中间状态,方便后续恢复。

注意事项:

(1)git stash 不保存已提交的内容(已在版本历史中);

(2)恢复储藏后,若有冲突需手动解决(类似合并冲突);

(3)储藏记录保存在本地仓库,不会推送到远程,需谨慎依赖长期储藏。

1、使用示例

        比方说线上有紧急BUG需要修复,但当前我的一个新功能开发只进行到一半,都不一定能跑通,代码不能提交。这个时候,可以使用git stash将当前工作区暂存(隐藏起来),拉取最新代码,修改后提交修复bug。之后再回复自己的暂存区,继续开发。

# 1.当前工程开发一半,有文件hangar_box/stop_task_save.sh不能提交
git status
On branch master
Your branch is up to date with 'origin/master'.Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   hangar_box/stop_task_save.shno changes added to commit (use "git add" and/or "git commit -a")# 2.git stash暂存工作区
$ git stash save "暂存区测试" -u   # 注意:-u 加在最后
warning: LF will be replaced by CRLF in hangar_box/stop_task_save.sh.
The file will have its original line endings in your working directory
Saved working directory and index state On master: 暂存区测试
再次实行git status,显示工作区间干净# 3.拉取最新代码更新提交# 4.恢复工作区,如果跟步骤3文件冲突,相当于做了一次合并
git stash apply

2、基本用法

2.1、保存当前修改

        保存当前修改。会将工作区和暂存区的所有修改(未跟踪文件默认不保存)存入一个临时 "储藏区",并将工作区恢复到上一次提交的干净状态。

git stash # 保存当前修改
git stash save "修复登录bug的临时修改" # 保存时添加说明

2.2、查看储藏列表

git stash list # 查看储藏列表

输出类似:

stash@{0}: On feature/login: 修复登录bug的临时修改
stash@{1}: WIP on main: 8a3b2c1 初始提交

        stash@{n} 是储藏的索引,n 越小表示越新的储藏。

2.3、恢复储藏的修改

git stash apply 恢复最新的储藏(并保留储藏记录)
git stash apply stash@{1}  # 恢复指定储藏,如:恢复第2条储藏
git stash pop  # 相当于 apply + drop,恢复最新的储藏(并删除储藏记录)

2.4、删除储藏记录

git stash drop # 删除最新的储藏,不要轻易删储存,除非确定不用它了
git stash drop stash@{1} # 删除指定储藏
git stash clear # 删除所有储藏

3、进阶用法

3.1、保存未跟踪文件

        默认不保存未跟踪文件(如新建的文件),需加 -u 或 --include-untracked:

git stash -u  # 保存时支持对新建文件的添加
git stash save "修复登录bug的临时修改" -u # 保存时添加说明

3.2、保存所有文件(包括忽略的文件)

        用 -a 或 --all 保存未跟踪文件和 .gitignore 中忽略的文件:

git stash -a

3.3、从储藏创建分支

        若储藏的修改与当前分支冲突,可直接从储藏创建新分支:

git stash branch new-branch stash@{1}

4、恢复删除的存储

        如果通过 git stash drop 或 git stash clear 误删了 stash 存储,只要没有执行过 git gc(Git 垃圾回收)清理未引用的对象,通常可以通过以下方法找回:

步骤 1:找到被删除的 stash 对应的 commit ID

        Git 的所有 stash 本质上都是以 commit 对象的形式存储的,即使被删除,也能通过 reflog 找到记录。执行以下命令查看所有 stash 相关的操作记录:

git reflog show stash@{0} # 查看所有 stash 相关的操作记录
git reflog # 或查看所有引用的变更记录(包含 stash 的创建和删除)

        输出结果中会包含类似这样的记录(重点关注 WIP on  相关的条目):

a1b2c3d (HEAD -> main) HEAD@{0}: stash: WIP on main: 8a3b2c1 初始提交
e4f5g6h HEAD@{1}: stash: WIP on feature/login: 修复登录bug的临时修改

        其中 a1b2c3d、e4f5g6h 就是 stash 对应的 commit ID(完整 ID 可通过 git log -g 查看)。

步骤 2:恢复指定的 stash 记录

        找到目标 stash 的 commit ID 后,有两种恢复方式:

方式 1:重新创建 stash 条目(推荐)

        用 git stash apply 直接应用该 commit 的修改,同时会自动重新创建一个 stash 记录:

git stash apply e4f5g6h

方式 2:从 commit 创建新分支(适合有冲突的情况)

        如果直接应用有冲突,可基于该 stash 创建新分支:

git branch recover-stash e4f5g6h

        然后切换到新分支查看修改:

git checkout recover-stash

注意事项:

        时效性:被删除的 stash 会作为 “未引用对象” 存在,默认情况下 Git 会在 30 天后通过 git gc 自动清理。如果删除时间过长且执行过垃圾回收,可能无法找回。

        快速操作:发现误删后,应立即执行 git reflog 查找记录,避免执行 git gc 或等待自动清理。

        验证内容:恢复后建议用 git diff 或 git status 确认找回的修改是否正确。

        如果以上方法仍无法找回,可能是 stash 对应的 commit 已被彻底清理,这种情况下恢复难度极大,建议平时重要的临时修改尽量通过分支管理(而非长期依赖 stash)。

http://www.dtcms.com/a/335968.html

相关文章:

  • 因果知识图谱:文本预处理的革命性突破
  • pytest中使用loguru的问题及解决
  • CF2121C Those Who Are With Us
  • Week 12: 深度学习补遗:RNN与LSTM
  • Vue 与 React 深度对比:设计哲学、技术差异与应用场景
  • Zemax 中的透镜设计 - 像差理论
  • Python | 解决 matplotlib 中文乱码
  • CentOS7安装部署GitLab社区版
  • 从需求到部署全套方案:餐饮服务许可证数据可视化分析系统的大数据技术实战
  • 深入浅出全面理解贝叶斯框架(Bayesian Framework)
  • jinja2模板引擎全面解析
  • Python3字符串全面指南:从基础操作到40个内建函数实战
  • Go语言并发编程 ------ 锁机制详解
  • 深入理解 uni-app 页面导航:switchTab、navigateTo、redirectTo、reLaunch 与 navigateBack
  • 2.4 双向链表
  • QUIC浅析
  • 流浪循环 全DLC(Rogue Loops)免安装中文版
  • 超市电商销售分析项目:从数据分析到业务决策
  • 【架构师从入门到进阶】第五章:DNSCDN网关优化思路——第十一节:网关安全-对称与非对称加密
  • PHP静态类self和static用法
  • 【计算机视觉与深度学习实战】04基于K-Means聚类的图像分割系统设计与实现
  • Java Stream 初解
  • 14.web api 5
  • 基于MATLAB多智能体强化学习的出租车资源配置优化系统设计与实现
  • 无人机视角乱堆垃圾垃圾场地分割数据集labelme格式1501张1类别
  • qt svg缺失元素, 原因是不支持 rgba
  • Android studio gradle有关设置
  • 图解 setTimeout + 循环:var 共享变量 vs let 独立绑定
  • 《若依》介绍和环境搭建
  • 基于径向基函数神经网络的数据回归预测 RBF