Git | git stash命令详解

关注: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,我们可以有效地管理未提交的修改,避免数据丢失或混乱。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL素材怎么导入Navicat???

不管用什么方法都要先关掉MySQL服务&#xff0c;并且提前备份数据&#xff01; 1.有sql文件时候。 打开navicat&#xff0c;运行sql文件 然后点击后面三个点&#xff0c;选中要运行的sql文件&#xff0c;开始。 鼠标右键刷新一下&#xff0c;就能看到sql文件中的表了 2.没有s…

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统&#xff0c;可以通过以下几种方法尝试分析&#xff1a; 查看页面源代码&#xff1a; 打开网站&#xff0c;右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志&#xff0c;例如&#xff1a; WordPress 的迹象&#xff1a…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务&#xff0c;存储非结构化数据&#xff0c;兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

【DB-GPT】开启数据库交互新篇章的技术探索与实践

一、引言&#xff1a;AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中&#xff0c;企业对于智能化应用的需求日益增长。然而&#xff0c;传统的数据应用开发方式面临着诸多挑战&#xff0c;如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…

解决aerich init -t xx 报错ModuleNotFoundError: No module named ‘tomli_w‘

今天在学习fastapi的时候&#xff0c;发现一款数据库迁移工具&#xff0c;通过这个工具可以根据模型类来对数据库做出改变。 随跟着学: 在执行 aerich init -t settings.TORTOISE_ORM的时候&#xff0c; 彼其娘之。。 报了一些错误&#xff1a; Traceback (most recent ca…

.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度

NPOI&#xff1a;支持xlsx&#xff0c;.xls&#xff0c;版本>2.5.3 XLS&#xff1a;HSSFWorkbook&#xff0c;主要前缀HSS&#xff0c; XLSX&#xff1a;XSSFWorkbook&#xff0c;主要前缀XSS&#xff0c;using NPOI.XSSF.UserModel; 1、导出Excel添加图片效果&#xff0…

浅谈云计算07 | 云安全机制

浅谈云计算安全机制&#xff1a;全方位守护云端世界 一、引言二、加密技术&#xff1a;数据的隐形护盾三、散列机制&#xff1a;数据完整性的忠诚卫士四、数字签名&#xff1a;数据来源与真伪的鉴定专家五、公钥基础设施&#xff08;PKI&#xff09;&#xff1a;信任的基石六、…

Unity 2d描边基于SpriteRender,高性能的描边解决方案

目标 以Unity默认渲染管线为例&#xff0c;打造不需要图片内边距&#xff0c;描边平滑&#xff0c;高性能的描边解决方案 前言 在2d游戏中经常需要给2d对象添加描边&#xff0c;来突出强调2d对象 当你去网上查找2d描边shader&#xff0c;移植到项目里面&#xff0c;大概率会…

Uniapp仿ChatGPT Stream流式输出(非Websocket)

Uniapp仿ChatGPT Stream流式输出&#xff08;非Websocket&#xff09; 前言&#xff1a;流式输出可以使用websocket也可以使用stream来实现EventSource是 HTML5 中的一个接口&#xff0c;用于接收服务器发送的事件流&#xff08;Server - Sent Events&#xff0c;SSE&#xff…

黑马linux入门笔记(01)初始Linux Linux基础命令 用户和权限 实用操作

B站 黑马程序员 的视频 BV1n84y1i7td 黑马程序员新版Linux零基础快速入门到精通&#xff0c;全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等 增强自控力 冥想慢呼吸绿色锻炼充分休息减少决策次数优先做重要的事情(早晨)融入强自控群控…

当你不小心使用了MySQL的保留字作为字段名而导致你的SQL语法解析错误该怎么办!

问题举例&#xff1a; 你在尝试更新一个名为 desc 的字段时遇到了 SQL 语法错误。原因是 desc 是 MySQL 的保留字&#xff0c;通常用于表示 ORDER BY 子句中的降序&#xff08;DESC&#xff09;&#xff0c;因此直接使用 desc 作为字段名会导致 SQL 解析错误。如下图&#xff…

excel设置好的可选择列数据后,如何快速输入到单元格中?

当设置好列的【数据】-【数据有效性】-【序列】后&#xff0c;在单元格中输入可选择数据的开头&#xff0c;就会提示出对应的可选择数据&#xff0c;然后&#xff0c;按一下键盘上的【↓】键&#xff0c;再按回车&#xff0c;即可快速输入到单元格中。

2025封禁指定国家ip-安装xtables-addons记录

如何安装和使用 安装lux仓库(该仓库包含xtables-addons所需的依赖环境) # wget http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm # rpm -ivh lux-release-7-1.noarch.rpm 安装xtables-addons。注意&#xff1a;必须先安装kmod-xtables-addons&#xff0c;再…

力扣 岛屿数量

从某个点找&#xff0c;不断找相邻位置。 题目 岛屿中被“0”隔开后 &#xff0c;是每一小块状的“1”&#xff0c;本题在问有多少块。可以用dfs进行搜索&#xff0c;遍历每一个点&#xff0c;把每一个点的上下左右做搜索检测&#xff0c;当检测到就标记为“0”表示已访问过&a…

ssl与ipsec的区别

ssl与ipsec的区别&#xff1a; 1.概念不同: ssl是一种安全协议&#xff0c;可通过Internet安全地发送信息&#xff0c;而ipsec即Internet协议安全性&#xff0c;是为Internet协议提供安全性的一组协议。 2.所在层不同: ssl在传输和应用层中工作&#xff0c;而ipsec在Interne…

基于大语言模型的组合优化

摘要&#xff1a;组合优化&#xff08;Combinatorial Optimization, CO&#xff09;对于提高工程应用的效率和性能至关重要。随着问题规模的增大和依赖关系的复杂化&#xff0c;找到最优解变得极具挑战性。在处理现实世界的工程问题时&#xff0c;基于纯数学推理的算法存在局限…

批量识别图片型PDF指定区域内容识别保存表格+PDF批量改名:技术难题与项目实战总结

相关项目实战&#xff1a; 一、引言 在当今数字化办公环境中&#xff0c;批量处理PDF文件中的表格数据并进行改名是一项常见但具有挑战性的任务。无论是从大量的财务报销凭证、学术研究报告还是项目文档中提取表格信息&#xff0c;都可能遇到各种各样的技术难题。 二、批量提…

open3d+opencv实现矩形框裁剪点云操作(C++)

&#x1f451;主页&#xff1a;吾名招财 &#x1f453;简介&#xff1a;工科学硕&#xff0c;研究方向机器视觉&#xff0c;爱好较广泛… ​&#x1f4ab;签名&#xff1a;面朝大海&#xff0c;春暖花开&#xff01; open3dopencv实现矩形框裁剪点云操作&#xff08;C&#xff…

LabVIEW光流跟踪算法

1. 光流跟踪算法的概述 光流&#xff08;Optical Flow&#xff09;是一种图像处理技术&#xff0c;用于估算图像中像素点的运动。通过比较连续帧图像&#xff0c;光流算法可以分析图像中的运动信息&#xff0c;广泛用于目标跟踪、运动检测和视频处理等场景。该示例使用了NI Vi…

django在线考试系统

Django在线考试系统是一种基于Django框架开发的在线考试平台&#xff0c;它提供了完整的在线考试解决方案。 一、系统概述 Django在线考试系统旨在为用户提供便捷、高效的在线考试环境&#xff0c;满足教育机构、企业、个人等不同场景下的考试需求。通过该系统&#xff0c;用…