Git | git stash命令详解

news2025/1/13 8:01:03

关注:CodingTechWork

引言

  在日常开发中,使用Git版本控制系统时,可能会遇到需要暂时中断当前工作,去处理其他任务的情况。这时,如果直接切换分支,可能会导致当前的修改未提交而丢失或需要暂时保存修改的状态。为了解决这个问题,Git提供了一个非常有用的命令:git stash

Git Stash介绍

  git stash命令的主要作用是将当前工作目录中的修改(暂存区和工作区)保存到一个栈中,然后将工作区恢复到与当前分支最新提交相同的状态。这样,你就可以自由地切换到其他分支,处理其他任务,等完成后再将之前的修改恢复回来。

git stash 基本用法

git stash

当你执行git stash时,Git会执行以下操作:

  1. 保存未暂存的修改:工作目录中的修改(未暂存)会被保存。
  2. 保存已暂存的修改:已添加到暂存区的修改(即通过git add命令暂存的文件)也会被保存。
  3. 恢复工作区的干净状态:工作目录和暂存区都将被恢复到最新提交的状态。

git stash 命令常见选项

git stash save <message>

git stash save "your message"

可以为stash添加一个描述性的信息,便于后续查看和管理。例如:

git stash save "WIP: Implement login feature"

这个命令会将修改保存到stash中,并给该stash加上一个标记“WIP: Implement login feature”

git stash list

git stash list

查看当前所有的stash。输出的每一行都是一个stash记录,类似于:

stash@{0}: WIP on feature/login: a1b2c3d Implement login feature
stash@{1}: WIP on feature/search: d4e5f6g Add search feature

每个stash都有一个唯一的标识符(如stash@{0}),并且会列出该stash所在的分支、提交以及描述信息。

git stash show

git stash show

查看最新的stash所做的更改,默认只显示修改的文件名。输出结果可能类似于:

modified:   login.js
modified:   styles.css

如果需要查看具体的更改内容,可以使用-p(patch)选项:

git stash show -p

这将显示更改的详细差异内容(类似于git diff的输出)。

git stash apply

git stash apply stash@{0}

将指定的stash内容恢复到当前工作目录中,但是不会将该stash从stash栈中移除。stash@{0}代表最新的stash记录,你也可以指定其他的stash编号(如stash@{1})。

git stash apply

如果没有指定stash标识符,默认会恢复最新的stash。

git stash pop

git stash pop

git stash popgit stash apply类似,都会将stash中的更改应用到当前工作目录,但是与apply不同的是,pop会将该stash从stash栈中移除。使用pop时,如果发生冲突,可以通过Git的冲突解决机制进行处理。

git stash drop

git stash drop stash@{0}

删除指定的stash记录。这个操作是不可逆的,因此在删除之前需要谨慎确认。

git stash clear

git stash clear

删除所有的stash记录。此命令将清空所有的stash,确保你不再需要任何的stash内容后再执行该命令。

git stash branch <branch-name>

git stash branch feature/login-branch stash@{0}

这个命令会创建一个新的分支,基于stash中保存的状态恢复修改。执行完这个命令后,你会切换到新创建的分支,并将stash的修改应用到该分支上。执行完成后,原stash记录将被移除。

git stash的工作原理

git stash实际上是通过以下步骤来实现的:

  1. 保存当前工作区的修改:Git会将工作目录中的所有修改(包括未暂存的修改和暂存区中的修改)保存到一个“隐藏”区域中。
  2. 恢复到最新提交的状态:在保存修改之后,Git会将当前工作目录还原到最近一次提交的状态。
  3. 栈式存储:每次调用git stash,会将修改保存在一个栈结构中,最先保存的stash会排在栈的底部,最新保存的stash会排在栈顶。每次执行git stash applygit stash pop时,Git会从栈顶取出一个stash并应用到当前的工作区。

stash与分支切换的结合

  git stash非常适用于切换分支的场景。例如,你正在开发一个新功能,并且修改了某些文件,但突然需要切换到另一个分支去处理紧急的bug。如果你直接切换分支,当前的修改会阻止切换,因为这些修改未提交。此时,你可以使用git stash命令保存当前修改,再切换到目标分支,处理完紧急任务后再使用git stash pop恢复修改。

高级用法

stash与文件指定

如果你只想暂存某个特定的文件而不是所有文件,可以指定文件:

git stash push <file>

这种方式会将指定的文件变更保存到stash中,而不影响其他文件。

stash只保存暂存区的内容

有时,你可能只希望将已暂存的文件保存到stash中,而不包括工作目录中的未暂存文件。可以使用--staged选项:

git stash push --staged

此时,Git仅会将暂存区的内容保存到stash,而工作目录中的修改会保留。

git stash的最佳实践

  1. 清晰的注释:使用git stash save "message"时,提供清晰的描述信息,帮助日后回顾和管理不同的stash记录。
  2. 定期清理:虽然git stash是一个非常有用的工具,但积累过多的stash记录可能导致混乱。定期使用git stash list查看当前的stash,删除不再需要的记录(git stash dropgit stash clear)。
  3. 避免长期依赖stash:stash并非用于长期存储修改,它只是一个临时保存工作状态的工具。长期的开发工作最好是通过提交和分支管理来处理。

总结

  Git的stash命令为开发人员提供了一个方便快捷的方式来保存临时的修改,以便进行分支切换或处理其他任务。通过使用git stash,我们可以有效地管理未提交的修改,避免数据丢失或混乱。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2275883.html

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

相关文章

每日十题八股-2025年1月12日

1.为什么四次挥手之后要等2MSL? 2.服务端出现大量的timewait有哪些原因? 3.TCP和UDP区别是什么&#xff1f; 4.TCP为什么可靠传输 5.怎么用udp实现http&#xff1f; 6.tcp粘包怎么解决&#xff1f; 7.TCP的拥塞控制介绍一下&#xff1f; 8.描述一下打开百度首页后发生的网络过…

制造企业“数字化转型”典型场景参考

聚焦产业链上下游企业研发设计、生产制造、运维服务、经营管理、供应链管理等场景&#xff0c;以场景为切入点梳理数字化转型痛点需求&#xff0c;绘制重点行业、重点产业链数字化转型场景图谱&#xff08;简称“一图谱”&#xff09;&#xff0c;明确企业数字化转型路径&#…

Web渗透测试之XSS跨站脚本 防御[WAF]绕过手法

目录 XSS防御绕过汇总 参考这篇文章绕过 XSS payload XSS防御绕过汇总 服务端知道有网络攻击或者xss攻 Html

《机器学习》——sklearn库中CountVectorizer方法(词频矩阵)

CountVectorizer方法介绍 CountVectorizer 是 scikit-learn 库中的一个工具&#xff0c;它主要用于将文本数据转换为词频矩阵&#xff0c;而不是传统意义上的词向量转换&#xff0c;但可以作为词向量转换的一种基础形式。用于将文本数据转换为词频矩阵&#xff0c;它是文本特征…

session-manager-plugin: command not found 解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Linux之读者写者模型与特殊锁的学习

目录 读者写者模型 特殊锁 悲观锁 自旋锁 在前几期&#xff0c;我们学习了多线程的生产者和消费者模型&#xff0c;生产者和消费者模型中&#xff0c;有三种关系&#xff0c;两个角色&#xff0c;一个场所&#xff0c;那么读者写者模型和生产者消费者模型有什么关联吗&…

期刊(中英),期刊分区,期刊所在数据库(中英),出版商区别和联系

目录 对期刊、分区、数据库、出版商整体了解期刊&#xff08;中英&#xff09;期刊分区期刊所在数据库总结 出版商 对期刊、分区、数据库、出版商整体了解 下图是我对这四部分的一个理解&#xff0c;其中期刊根据论文使用语言分为中英两种&#xff0c;期刊分区是用来评判论文质…

数学函数的参数和返回值探秘

数学函数的参数和返回值探秘 一、数学函数的参数1.1 隐式类型转换1.2 隐式类型转换的秘密 二、数学函数的返回值 本文所说的数学函数单指<math.h>中的系统函数&#xff0c;这些函数对参数和返回值的要求与其他类函数是有一点不同的。尤其是参数部分&#xff0c;是有值得深…

炸砖块游戏的最终图案

描述 小红正在玩一个“炸砖块”游戏,游戏的规则如下:初始有一个 n * m 的砖块矩阵。小红会炸 k 次,每次会向一个位置投炸弹,如果这个位置有一个砖块,则砖块消失,上方的砖块向下落。小红希望你画出最终砖块的图案。 输入描述 第一行输入三个正整数 n, m, k,代表矩阵的行…

代码随想录算法训练营第 4 天(链表 2)| 24. 两两交换链表中的节点19.删除链表的倒数第N个节点 -

一、24. 两两交换链表中的节点 题目&#xff1a;24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 视频&#xff1a;帮你把链表细节学清楚&#xff01; | LeetCode&#xff1a;24. 两两交换链表中的节点_哔哩哔哩_bilibili 讲解&#xff1a;代码随想录 dummy-…

【微服务】面试题 5、分布式系统理论:CAP 与 BASE 详解

分布式系统理论&#xff1a;CAP 与 BASE 详解 一、CAP 定理 背景与定义&#xff1a;1998 年由加州大学科学家埃里克布鲁尔提出&#xff0c;分布式系统存在一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分区容错性&#xff08;Part…

【网络】:网络编程套接字

目录 源IP地址和目的IP地址 源MAC地址和目的MAC地址 源端口号和目的端口号 端口号 VS 进程ID TCP协议和UDP协议 网络字节序 字符串IP和整数IP相互转换 查看当前网络的状态 socket编程接口 socket常见API 创建套接字 绑定端口号 发送数据 接收数据 sockaddr结构…

UnityDemo-TheBrave-制作笔记

这是我跟着b站up主MStudio的视频学习制作的&#xff0c;大体上没有去做一些更新的东西&#xff0c;这里只是一个总的总结。在文章的最后&#xff0c;我会放上可以游玩该游戏的链接和exe可执行文件&#xff0c;不过没有对游戏内容进行什么加工&#xff0c;只有基本的功能实现罢了…

力扣经典二分题:4. 寻找两个正序数组的中位数

题目链接&#xff1a;4. 寻找两个正序数组的中位数 - 力扣&#xff08;LeetCode&#xff09; 一、题目分析 这道题目是让我们在 两个正序的数组中寻找中位数已知两个数组的大小分别是&#xff1a;int m nums1.size(),n nums2.size();中位数性质1&#xff1a;中位数左侧元素 …

C++ 文字识别OCR

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

SpringBoot:SaToken的options预检请求鉴权失败

问题描述 使用如下sa-token配置&#xff0c;前端通过IP端口号的方式访问后端服务&#xff0c;会存在options预检请求鉴权失败的问题。 问题分析 http-options请求 HTTP OPTIONS 方法请求给定的 URL 或服务器的允许通信选项。客户端可以用这个方法指定一个 URL&#xff0c;或者…

UE材质函数

材质函数是可在不同材质中重复使用的材质表达式的一个集合 相当于把常用的功能封装到一个集合里&#xff0c;需要用到的时候调用 输入input可以添加输入节点 如果勾上公开到库&#xff0c;就可以在材质面板直接搜索到材质函数 材质函数可以直接做成一个输出

51c~Pytorch~合集5

我自己的原文哦~ https://blog.51cto.com/whaosoft/13059544 一、PyTorch DDP 正在郁闷呢 jetson nx 的torchvision安装~~ 自带就剩5g 想弄到ssd 项目中的 venv中又 cuda.h没有... 明明已经装好什么都对 算了说今天主题 啊对 还是搬运啊 学习之工具人而已 勿怪 Distrib…

用vscode写latex-1

一般大伙使用 LaTeX 大体有两种方案&#xff0c; 一种是在本地配置环境或使用本地的软件&#xff0c;如 vscode LaTeX&#xff0c;texlive&#xff0c;lyx 等等&#xff1b; 另一种是线上 LaTeX 平台&#xff0c;其中用的最多的是 Overleaf&#xff0c;还有一部分高校也有自…

用户界面软件05

已知应用 几乎所有的流行的用户界面架构都使用这种模式。我在这里举三个例子&#xff1a; 1. Seeheim 用户界面架构的特点是有一个应用核心的领域层和一个用户界面层。后者 被分为两层&#xff0c;叫做表示层和对话控制层。因为这个架构和面向事务系统有渊源&#xff0c;没有…