Git stash命令详解和使用

2024-09-23
1371 字约 5 分钟
...

 

stash 命令使用非常简单,是经常使用的命令

应用场景:

1 、临时存储已修改的代码:比如正在分支A上开发某个功能,还未完成,突然要切换到B分支上去修复一个bug。这时就可以用git stash命令将本地修改的内容保存至堆栈区,再切换到B分支修改bug,修复完成后,再切回到A分支,从堆栈中恢复刚刚保存的内容。

2 、同步代码:由于不小心,本来要在A分支上开发的功能代码,却写在了B分支上,这时就可以用git stash将本地代码保存至堆栈中,切回到A分支后,再次恢复内容即可。

git stash

保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。

当然,我们一般都是使用 git stash save '备注'  可以添加一些注释,方便查阅。

git stash list

显示保存进度的列表。也就意味着,git stash命令可以多次执行。

git stash pop

git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。
git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)
git stash pop stash@{1}恢复指定的进度到工作区。stash_id是通过git stash list命令得到的
通过git stash pop命令恢复进度后,会删除当前进度。

git stash apply

git stash apply stash@{stash_id}
除了不删除恢复的进度之外,其余和git stash pop 命令一样。

git stash drop

删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。

git stash clear

删除所有存储的进度。

git stash show

显示与当前分支差异

如:git stash show stash@{stash_id} 加上 -p 可以看详细差异

git stash clear之后的恢复

如果我们使用git stash将已修改的一些文件储藏起来了, 然后使用git stash clear清除之后还可以恢复么?

答案是:可以。

首先请出我们的主角:git fsck命令。

步骤

  1. git fsck --lost-found, 找出刚才删除的提交对象和文件对象, 里面是一个一个的 dangling commit commitId。

  2. git show commitId一个一个的查看修改的内容, 找到了我们需要恢复的commitId之后。

  3. git stash apply commitId直接恢复就可以了。

保存特定文件

方式一 (适合少数指定文件)

git stash -- filename

方式二(适合大量指定文件)

git stash -p

git stash -p 是一个交互式命令,会将已经更改的文件遍历,输入指定来决定处理方式,执行命令后,如下图:

需要stash的文件,我们就y

不需要stash需要commit的文件,我们就n

如果接下来没有需要stash的文件,则直接q退出就行.

将需要 stash 的文件全部暂存之后,就可以 commit 和push 剩下的代码了。

这里的[y,n,q,a,d,/,?]分别代表的含义如下:

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
git2025-07-21
git之代码提交错误解决
我 add 错误文件了,怎么办? 这个就比较简单了,执行 该命令的作用是: 撤销暂存 :所有已经 的文件会变成未暂存状态。 保留工作区的修改 :文件内容保持不变,仍然在工作区。你可以继续提交文件或者做一些修改之后再提交文件。 我不但 add 了还 commit 了,怎么办? 只能说你还没推送,还行!!! 其实也不难,执行一下 其中的HEAD 1是将 (当前分支的最新提交)回退到 前一个提交 ( 表示“当前提交的前一个”)。 如果你做了两...
学习
git2025-07-04
Git 移除已追踪文件/文件夹
<span style="color: var( g textcolor);" 详解如何优雅地从 Git 仓库中移除已被追踪的文件,并介绍相关的最佳实践和注意事项。</span 问题背景 在项目开发中,经常会遇到一些不应该被 Git 追踪的文件被意外提交的情况,比如: IDE 配置文件(.vscode、.idea 等) 编译生成的文件夹(node modules、dist 等) 本地配置文件 日志文件 解决步骤 1\. 创建或更新 .g...
学习
git2024-09-19
Git 代码提交规范,feat、fix、chore 都是什么意思
Git 代码提交规范,feat、fix、chore 都是什么意思? 经常看到别人提交的代码记录里面包含一些feat、fix、chore等等,而我在提交时也不会区分什么,直接写下提交信息,今天就来看一下怎么个事,就拿 element plus/ant design 来看一下。 其实这么写是一种代码提交规范,当然不是为了炫技,主要目的是为了提高提交记录的可读性和自动化处理能力。 当然如果团队没有要求,不这么写也可以。 commit mess...
学习
git2024-02-23
Git Worktree 的使用
官方介绍地址: 对于 git worktree 的使用场景,我们举个例子说明。 如果我们正在进行重构代码,老板突然要求我们立即修复某些问题。通常我们可能会使用 git stash 来临时存储相关更改,但是此时工作树会处于这样一种混乱状态(有新增的、被移动的、被删除的文件,以及其他的修改)。一个不注意,我们就会打乱 git stash 中的文件,此时我们原本的修改或者 Git 管理有可能就会出现问题。 如果我们希望在不影响现有更改的前提下...
学习
八股文2026-07-30
一、TypeScript与类型系统(20题)
1\. 在定义AI接口返回的嵌套数据结构(如多轮对话、工具调用结果)时,如何用TypeScript的泛型与条件类型实现灵活的类型推导? 场景:为“AI助手”定义统一的消息类型系统,需兼容不同模型供应商(OpenAI/Anthropic)及内部(Moonshot)的返回格式。 核心答案: 构建一个以泛型为基础、条件类型为分支的层次化类型系统。核心是利用泛型参数化“消息内容”、“工具调用”和“提供商”,再通过条件类型精确匹配不同场景下的数据...
学习
godot2026-07-27
Godot 4 常用 UI 节点详解
Godot 4 常用 UI 节点详解 在 Godot 4 中,UI 系统基于 Control(控件) 节点构建。所有 UI 节点都继承自 Control,形成一棵完整的 UI 树。与游戏引擎中常见的"Canvas + DOM"模式不同,Godot 的 UI 系统是声明式的——你在场景中搭好节点树,引擎自动完成布局计算。 一、布局系统:Container 家族 Container 是 Godot UI 的 骨架 。它决定了子节点的大小和位...
学习

评论

请登录后发表评论

去登录
加载评论中...

目录