玩转GIT之看清 git stash 的本质

本文介绍了 Git Stash 的常见应用场景及命令用法,重点讲解如何利用 Git Stash 在不同项目间快速切换并保存未完成的工作进度。
开发经验

1:当你新建文件修改了代码,如果没有git add 那么你用 git stash 是不能保存修改到暂存区的,但是如果你没有新建文件,只是在原有文件里进行修改,那么是可以在没有git add 的情况下保存到修改到暂存区的。


2:不论做什么样的修改,当你git add 之后,你都可以使用git stash 进行保存,然后再用git stash apply 进行恢复。

3:注意,git stash apply 是不能将stash list 里面的暂存列表清除的,必须再用git stash drop 或者一开始就用
git stash pop 恢复,这样在恢复的同时,就把stash list 里面的数据清除。

下面是开发中最多的用法【没有之一】
// 正撸A项目的时候,被拉去做B项目,这个时候 stash 就要上场了
// 先把A项目的已经写好的代码 git add 一下
git add .
// 然后将A项目保存到暂存区
git stash
// 然后写B项目代码,写完并且commit完,准备回来开发A项目,再执行
git stash apply
// 这样就将之前开发A项目的代码从暂存区拿了出来,就可以继续A项目的开发了

下面是一些命令科普
  • git stash

    保存当前的工作进度。会分别对暂存区和工作区的状态进行保存。

  • git stash save “message…”

    这条命令实际上是第一条 git stash 命令的完整版。

  • git stash list

    显示进度列表。此命令显然暗示了git stash 可以多次保存工作进度,并用在恢复时候进行选择。

  • git stash pop

    如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作进度列表中清除。

  • git stash apply

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

  • git stash clear

    删除所有存储的进度。

<think>好的,用户问的是“git stash push 和git stash save都是什么意思”。我需要先确认这两个命令的用途以及它们的区别。 首先,我记得在Git中,`git stash`用于保存工作目录的修改,但具体命令可能有不同的选项。用户提到的两个命令,push和save,可能都是保存修改的子命令。不过,我需要确认Git的版本是否影响这些命令的存在。 查阅Git文档,发现`git stash save`是旧版本的命令,用于保存当前的工作进度。而`git stash push`是较新版本引入的替代命令,功能类似,但可能有更多的选项。例如,push允许指定路径,而save可能不支持。 接下来,需要解释这两个命令的基本用法,以及它们的区别。比如,`save`后面可以跟一个消息,而`push`可能也支持消息,同时还能指定文件路径。另外,还要提到`git stash`的其他相关命令,比如apply和list,帮助用户理解整体流程。 用户可能是在使用Git时遇到了这两个命令,或者在教程中看到不同的写法,想了解它们的作用和区别。需要确保回答清晰,指出哪个命令是推荐使用的,以及为什么会有两个类似的命令存在。 另外,可能需要提醒用户注意Git版本,因为旧版本可能不支持`push`,但现代版本应该都支持。同时,给出示例代码,展示如何使用这两个命令,并说明它们的实际效果是否相同。 最后,确保回答结构清晰,分点说明每个命令的功能、区别以及使用场景,并提供相关问题供用户进一步学习。</think>`git stash push` 和 `git stash save` 是 Git 中用于 **临时保存工作进度** 的命令,属于 `git stash` 子命令的不同写法。它们的核心功能是 **将当前工作目录的修改(包括暂存区和非暂存区的改动)保存到栈中**,以便后续恢复。以下是具体含义和区别: --- ### **1. `git stash save`** - **功能**:将当前工作目录的修改保存为一个临时记录(称为 "stash"),并添加一条描述信息。 - **语法**: ```bash git stash save "描述信息" ``` - **特点**: - 旧版本 Git 的默认写法(早期版本仅支持 `save`)。 - 必须手动输入描述信息(可选,但推荐)。 - **示例**: ```bash git stash save "修复登录页样式问题" ``` --- ### **2. `git stash push`** - **功能**:与 `save` 完全相同,但语法更灵活,支持更多参数(如指定路径)。 - **语法**: ```bash git stash push [-m "描述信息"] [--] [<pathspec>...] ``` - **特点**: - Git 2.16+ 版本引入,推荐使用 `push` 替代 `save`。 - 支持仅保存特定文件或目录(通过 `<pathspec>`)。 - `-m` 参数用于添加描述信息(可选)。 - **示例**: ```bash git stash push -m "临时保存登录页修改" src/login.js ``` --- ### **核心区别** | 特性 | `git stash save` | `git stash push` | |--------------------|------------------------|------------------------| | **语法灵活性** | 仅支持全局保存 | 支持指定路径保存 | | **描述信息** | 直接输入描述文本 | 通过 `-m` 参数添加描述 | | **版本要求** | 所有 Git 版本 | Git 2.16+ 推荐使用 | | **功能等价性** | 完全等价 | 完全等价 | --- ### **典型使用场景** 1. **切换分支时保存未完成的修改** ```bash # 保存当前修改 git stash push -m "临时保存" # 切换到其他分支 git checkout feature-xyz # 完成工作后恢复修改 git stash apply ``` 2. **仅保存部分文件的修改** ```bash # 仅保存 src/utils.js 的修改 git stash push src/utils.js ``` 3. **查看保存的记录列表** ```bash git stash list # 输出示例: # stash@{0}: On main: 临时保存登录页修改 # stash@{1}: WIP on feature-xyz: 新增用户配置 ``` --- ### **注意事项** 1. **`save` 和 `push` 的等价性** - 两者最终都会生成一个 stash 记录(通过 `git stash list` 可查看)。 - 内部实现完全一致,只是语法不同。 2. **推荐使用 `push`** - 语法更灵活(支持路径过滤)。 - 与 Git 其他子命令(如 `git push`)保持命名一致性。 3. **恢复修改的方式** - 使用 `git stash apply` 或 `git stash pop` 恢复最近一次保存的修改。 --- ### **相关问题**
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值