git stash 怎么用?

本文详细介绍了Git Stash命令的使用方法,包括如何保存、应用和删除工作区快照,以及stash pop与stash apply的区别。适合Git用户学习如何高效管理未完成的工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、切换分之前,添加改动文件到stash; git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。

git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。

git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。

git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

在原分支 git stash save -a “messeag”,-a选项才会将新加入的代码文件同时放入暂存区。如果是以前就有了,那么就不用加-a,你加的话,会报错的。

这里的message已经要标注情况,分支倒是不用标明,一定要标明他的用途,不然你真的会乱的。

二、切换回以前的分支后,如果你要恢复的是最近的一次改动,git stash pop,我想这是大家最常用的命令了吧; 如果有多次stash操作,那就通过git stash list查看stash列表,从中选择你想要pop的stash,运行命令git stash pop stash@{id}或者 git stash apply stash@{id}即可。

三、删除stash; git stash drop stash@{id} 如果不加stash编号,默认的就是删除最新的,也就是编号为0的那个,加编号就是删除指定编号的stash。 当你都玩完了后,可以用git stash clear清理所有的缓存记录。

四、git stash pop 与 git stash apply 的区别; 这两个命令的区别。原来git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除,而 git stash apply stash@{id} 命令则会继续保存stash id。 一般来说你直接git stash pop stash@{id}就可以了,当然你如果想存下来,再后期的再次复原的话,可以用git satsh apply 。 见过一同事在git commit之前,居然在stash缓存区内放入了二十几次的stash记录,这尼玛,你就不能commit下呀。

参考网址

### Git Stash 使用指南 #### 什么是 Git Stash? `git stash` 是一种用于临时存储未完成更改的功能,允许开发者在不影响当前工作目录的情况下切换上下文。它特别适用于需要频繁切换分支或多任务开发的场景[^1]。 --- #### 基本概念 - **Stash 堆栈**:每次执行 `git stash` 或其变体时,改动会被保存到一个堆栈中。最新的改动位于堆栈顶部。 - **应用与恢复**:可以将某个 stash 中的改动重新应用于工作区,可以选择是否保留原始 stash 数据。 --- #### 主要命令及其用途 ##### 1. 保存当前改动 ```bash git stash -u save "备注信息" ``` 该命令会将当前的工作区和暂存区的改动保存到 stash 堆栈中。参数 `-u` 表示同时保存未跟踪文件(untracked files)。默认情况下仅保存已存在的文件的修改。 ##### 2. 查看所有 stash 列表 ```bash git stash list ``` 显示所有保存的 stash 记录,每条记录都有唯一的 ID 格式为 `stash@{n}`,其中 n 是索引号。例如: ``` stash@{0}: WIP on master: a1b2c3d 提交消息 stash@{1}: WIP on feature-x: e4f5g6h 更改描述 ``` ##### 3. 应用最近一次 stash 改动 ```bash git stash apply ``` 将最新的一次 stash 改动应用到当前工作区,但不会从堆栈中移除这条 stash[^3]。 如果希望同时删除该 stash,则使用以下命令: ```bash git stash pop ``` ##### 4. 应用指定的 stash 改动 假设想应用第 `{1}` 条 stash 的改动: ```bash git stash apply stash@{1} ``` 同样地,若需同时删除该 stash: ```bash git stash pop stash@{1} ``` ##### 5. 查看某条 stash 的具体内容 ```bash git stash show stash@{id} ``` 或者查看更详细的差异信息: ```bash git stash show -p stash@{id} ``` ##### 6. 删除特定的 stash 当不再需要某些 stash 时,可以通过以下方式清除: ```bash git stash drop stash@{id} ``` 清空整个 stash 堆栈: ```bash git stash clear ``` ##### 7. 创建新分支并应用 stash 有时可能需要基于某个 stash 创建一个新的分支继续开发: ```bash git stash branch 新分支名 stash@{id} ``` --- #### 实际应用场景 1. **多任务开发** 当前正在处理的任务尚未完成,而需要紧急修复另一个问题时,可先将现有改动 stashed,再切换到其他分支进行修复。 2. **避免代码覆盖** 在多人协作环境中,通过合理使用 `git stash` 可有效防止因频繁切换分支而导致的代码丢失或冲突[^5]。 3. **清理工作区** 如果工作区存在大量未提交的改动,而又不想立即提交这些改动,可以将其暂时存储起来以便后续处理[^4]。 --- #### 注意事项 - 若未加 `-u` 参数,默认不会保存未追踪文件。因此,在涉及新增文件的操作时务必显式声明[^1]。 - 执行 `apply` 不会影响原 stash;只有 `pop` 操作才会同时移除对应的 stash 数据[^3]。 - 定期清理无用的 stash 避免占用过多内存资源。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值