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.pswp.cn/bicheng/93630.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 3.5+ Teleport defer 属性详解:解决组件渲染顺序问题的终极方案

&#x1f4cb; 概述 Vue 3.5 引入了 Teleport 的 defer 属性&#xff0c;这是一个重要的延迟解析特性。传统的 Teleport 在组件挂载时会立即解析目标容器&#xff0c;而 defer 属性允许推迟 Teleport 的目标解析&#xff0c;直到应用的其他部分挂载完成。 ⚠️ 传统 Teleport …

【102页PPT】某著名企业智能制造解决方案及智能工厂产品介绍(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2501_92808811/91662620 资料解读&#xff1a;某著名企业智能制造解决方案及智能工厂产品介绍 详细资料请看本解读文章的最后内容 智能制造背景与整体规划…

Revisiting Character-level Adversarial Attacks for Language Models

文章目录**核心设计目标****关键步骤与实现细节**1. **候选位置选择&#xff08;Algorithm 1: get_top_locations&#xff09;**2. **扰动生成与筛选&#xff08;Algorithm 2: Charmer&#xff09;**3. **适配大语言模型&#xff08;LLM&#xff09;的攻击****实验中的性能表现…

(一)Python + 地球信息科学与技术 (GeoICT)=?

目录 引子 一、核心定位&#xff1a;Python 为何能重塑 GeoICT&#xff1f; 二、Python 在 GeoICT 中的关键应用领域 1. 空间数据处理&#xff08;GIS 基础&#xff09; 2. 遥感图像处理与解译 3. 空间分析与建模 4. 地学数据可视化 5. 时空大数据分析 三、Python GeoI…

OpenAI 发布了 GPT-5,有哪些新特性值得关注?国内怎么使用GPT5?

GPT-5很强&#xff0c;在LMAreana上获得了1481分&#xff0c;超过Gemini 2.5 Pro&#xff0c;夺回第一。 国内怎么使用GPT5&#xff1f;-> zhangfeidezhu.com/?p1033 这次发布的GPT-5系列包含三个模型&#xff1a; GPT-5&#xff1a;适合复杂推理、广泛的世界知识&#x…

PowerPoint和WPS演示放映PPT时如何禁止鼠标翻页

在演示播放PPT的时候&#xff0c;我们有时候会用鼠标在幻灯片上划重点&#xff0c;一不小心就点击了鼠标左键&#xff0c;而默认的鼠标左键是向下翻页&#xff08;下一步&#xff09;。可以简单设置一下&#xff0c;禁用鼠标翻页的功能&#xff0c;改为其他方式翻页。一、禁用/…

基于springboot养老院管理系统 毕业论文+项目源码及数据库文件

&#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;优创学社 &#x1f495;&#x1f495;个人简介&#xff1a;本人在读博士研究生&#xff0c;拥有多年程序开…

Meteodyn WT 6.7(Meteodyn)风力资源评估及微观选址软件工具

Meteodyn WT 6.7&#xff08;Meteodyn&#xff09;风力资源评估及微观选址软件工具&#xff0c;基于计算流体力学&#xff08;CFD&#xff09;技术&#xff0c;主要用于复杂地形下的风能评估和风电场选址。该软件由法国政府环境与能源署&#xff08;ADEME&#xff09;支持开发&…

计算机网络 TCP time_wait 状态 详解

TCP 的 TIME_WAIT 状态是 TCP 连接终止过程中 主动关闭连接的一方&#xff08;通常是先调用 close() 或主动发送 FIN 的一端&#xff09;进入的一个重要状态。理解其原理、副作用和优化策略对高性能网络编程和服务器调优至关重要。&#x1f50d; 一、TIME_WAIT 是什么&#xff…

《GuardHFL: Privacy Guardian for Heterogeneous Federated Learning》——论文阅读

研究背景&#xff1a;异构联邦中各客户端模型结构&#xff0c;精度&#xff0c;算力都不同&#xff0c;无法像传统联邦那样共享梯度&#xff0c;只能通过“查询-响应”使用辅助数据来训练模型。这种方法存在严重隐私问题&#xff1a;直接共享查询样本会泄露敏感信息&#xff0c…

Spring AI 进阶之路01:三步将 AI 整合进 Spring Boot

引子 当 LLM 的浪潮以不可阻挡之势席卷全球&#xff0c;从改变用户交互到重塑商业模式&#xff0c;我们每一位开发者都身处这场技术变革的中心。作为庞大的 Java 生态中的一员&#xff0c;你是否也曾思考&#xff1a;当 Python 似乎成为 AI 的“官方语言”时&#xff0c;我们这…

pycharm2025导入anaconda创建的各个AI环境

目录1.pycharm下载及安装2.导入anaconda的环境到pycharm项目中1.pycharm下载及安装 建议从官网下载&#xff0c;不要乱下载。 https://www.jetbrains.com.cn/en-us/pycharm/ 右上角可以切换中英文&#xff0c;在此切换为中文。 点击下载&#xff0c;如下页面: 点击中间下载w…

获取IPv6地址的三种方式

DHCPv6无状态自动分配IP地址Server 配置&#xff1a;<Huawei>system-view[Huawei]ipv6[Huawei]dhcp enable[Huawei]dhcpv6 pool pool1[Huawei-dhcpv6-pool-pool1]dns-server 2002::2[Huawei-dhcpv6-pool-pool1]dns-domain-name example.com[Huawei-dhcpv6-pool-pool1]qui…

[Oracle数据库] Oracle 复杂查询

对于刚接触 Oracle 数据库的初学者来说&#xff0c;简单查询&#xff08;如SELECT * FROM 表名&#xff09;可能不难掌握&#xff0c;但面对复杂业务场景时&#xff0c;就需要更强大的查询能力。本文将围绕 Oracle 复杂查询的核心知识点展开&#xff0c;包括条件逻辑、分组函数…

Redis-plus-plus API使用指南:通用操作与数据类型接口介绍

&#x1f351;个人主页&#xff1a;Jupiter.&#x1f680; 所属专栏&#xff1a;Redis 欢迎大家点赞收藏评论&#x1f60a;目录通用 API连接 Redis1. get/set2. exists 方法3. del 方法4. keys 方法5. expire 方法6. ttl 方法7. type 方法8. flushall 方法String 类型 API1. ge…

基于遗传编程的自动程序生成

这里写目录标题核心概念与工作原理1. 个体表示&#xff1a;树结构2. 初始化种群3. 适应度评估4. 选择5. 遗传操作&#xff08;繁殖&#xff09;6. 新一代种群形成7. 终止条件基于遗传编程的符号回归示例问题示例GP实现符号回归&#xff08;Deap&#xff09;GP实现符号回归&…

flowable汇总查询方式

背景&#xff1a;小程序开发申请流程。使用flowable流程框架。用户需要在后台统揽用户申请的汇总表。 设计思路&#xff1a;通过查询流程实例分页查询获取数据&#xff0c; 其中可以通过查询条件进行查询&#xff0c;查询条件是流程申请时添加到流程变量当中的&#xff0c;方便…

力扣438:找到字符串中所有的字母异位词

力扣438:找到字符串中所有的字母异位词题目思路代码题目 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 思路 我们先不看异位词这个条件&#xff0c;如何在字符串s中找到字符串p。我们可以…

ruoyi-vue(十一)——代码生成

大部分项目里其实有很多代码都是重复的&#xff0c;几乎每个基础模块的代码都有增删改查的功能&#xff0c;而这些功能都是大同小异&#xff0c; 如果这些功能都要自己去写&#xff0c;将会大大浪费我们的精力降低效率。所以这种重复性的代码可以使用代码生成。一 代码生成使用…

neo4j导入导出方法

在 Neo4j 中&#xff0c;如果需要将数据从 一个环境导出&#xff0c;再 导入到另一个环境&#xff08;如从开发环境迁移到生产环境&#xff09;&#xff0c;可以通过以下方法实现&#xff1a;方法 1&#xff1a;使用 neo4j-admin 导出和导入&#xff08;完整数据库迁移&#xf…