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 管理有可能就会出现问题。 如果我们希望在不影响现有更改的前提下...
学习
http-网络2026-10-15
OAuth 2.0是什么,以及如何正确接入
一、先从一个需求理解 OAuth 2.0 假设你开发了一个相册整理工具,用户希望它读取某个云盘里的照片。 把云盘密码交给工具,会带来几个问题:工具拿到的权限太大,密码可能泄漏,用户也难以只撤销这个工具的访问。 OAuth 2.0 提供一套 委托授权机制 :用户在云盘自己的页面确认授权,工具取得一个有权限范围和有效期的访问令牌,再用它调用云盘 API。用户的云盘密码不交给工具。 可以把它理解为:给工具一张“限定用途的通行证”。但令牌泄漏同...
学习
前端2026-10-15
前端动画全景指南
一、前端动画到底是什么 前端动画,就是让画面随时间、用户输入或页面状态连续变化。变化的对象可以是按钮的位置、弹窗的透明度、SVG 的线条、Canvas 里的粒子,也可以是三维场景中的镜头。 先把三个问题分开: | 问题 | 常见答案 | | | | | 画什么? | DOM/CSS、SVG、Canvas 2D、GPU 渲染的场景、预制动画素材 | | 怎样变化? | CSS 过渡/关键帧、Web Animations API、逐帧计算、...
学习

评论

请登录后发表评论

去登录
加载评论中...

目录