Git | git stash命令详解

embedded/2025/1/15 0:10:50/

关注:CodingTechWork

引言

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

Git Stash介绍

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

git_stash__7">git stash 基本用法

git stash

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

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

git_stash__15">git stash 命令常见选项

git_stash_save_message_16">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_26">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_36">git stash show

git stash show

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

modified:   login.js
modified:   styles.css

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

git stash show -p

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

git_stash_apply_51">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_60">git stash pop

git stash pop

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

git_stash_drop_65">git stash drop

git stash drop stash@{0}

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

git_stash_clear_71">git stash clear

git stash clear

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

git_stash_branch_branchname_76">git stash branch <branch-name>

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

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

git_stash_82">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_105">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.ppmy.cn/embedded/153968.html

相关文章

http和https有哪些不同

http和https有哪些不同 1.数据传输的安全性&#xff1a;http非加密&#xff0c;https加密 2.端口号&#xff1a;http默认80端口&#xff0c;https默认443端口 3.性能&#xff1a;http基于tcp三次握手建立连接&#xff0c;https在tcp三次握手后还有TLS协议的四次握手确认加密…

SQLynx 数据库管理平台 3.6.0 全新发布:全面支持华为数据库和ClickHouse,代码提示更智能!

SQLynx 数据库管理平台 3.6.0 版本盛大发布&#xff1a;重磅更新引领数据库管理新风尚&#xff01; SQLynx 数据库管理平台近日迎来了翘首以盼的3.6.0版本更新&#xff0c;此次更新不仅深度整合了对华为GaussDB与ClickHouse数据库的卓越支持&#xff0c;还全面革新了代码提示功…

面对移动安全挑战,应用加固是不可忽视的防线

随着网络攻击变得越来越复杂和隐蔽&#xff0c;企业在移动应用安全方面面临着越来越大的压力。无论是金融应用、零售平台&#xff0c;还是社交和娱乐应用&#xff0c;都在不断遭遇着来自黑客和恶意软件的攻击。在这种日益严峻的形势下&#xff0c;应用加固&#xff08;App Shie…

Lua语言的数据类型

Lua语言的数据类型详解 Lua是一种轻量级、高效的脚本语言&#xff0c;广泛应用于游戏开发、嵌入式系统等领域。它的灵活性和简洁性是其受欢迎的因素之一。其中&#xff0c;Lua的基本数据类型构成了语言的基础&#xff0c;使得开发者可以更高效地处理各种数据。本文将全面介绍L…

贪心算法笔记

贪心算法笔记 大概内容 贪心就是对于一个问题有很多个步骤,我们在每一个步骤中都选取最优的那一个,最后得出答案。就是在一些函数中可行,但是有些比如二次函数,因为它的转折点不一定最优,就是不可行的。那么如何判断贪心呢?有这么几种 看时间复杂度,一般的就是 O ( n…

【STM32-学习笔记-5-】ADC

文章目录 ADCADC函数Ⅰ、ADC_InitTypeDef结构体参数①、ADC_Mode②、ADC_DataAlign③、ADC_ExternalTrigConv④、ADC_ContinuousConvMode⑤、ADC_ScanConvMode⑥、ADC_NbrOfChannel Ⅱ、ADC配置示例1、单次转换&#xff0c;非扫描单次转换非扫描模式下&#xff0c;获取多通道的…

《CPython Internals》阅读笔记:p118-p150

《CPython Internals》学习第 8 天&#xff0c;p118-p150 总结&#xff0c;总计 33 页。 一、技术总结 补充一些本人整理的关于 Context-Free Grammar(CFG) 的知识。 1.symbol(符号) A mathematical symbol is a figure or a combination of figures that is used to repre…

第六章:网页设计

文章目录&#xff1a; 一&#xff1a;网页设计 1.基本概念 1.1 网页 1.2 网站 1.3 工具 2.HTML语言 2.1 基础 2.2 标记 2.2.1 结构 2.2.2 文本 2.2.3 功能 2.2.4 表单 2.3 属性 二&#xff1a;IIS 1.定义 2.主要功能 3.特点与优势 4.应用场景 4.1 安装IIS …