git stash介绍(临时保存当前工作目录中尚未提交的修改)
文章目录
- **核心功能**
- 1. **保存未提交的修改**
- 2. **恢复保存的修改**
- 3. **管理多个临时状态**
- **典型使用场景**
- - **处理紧急任务**:正在开发新功能,但突然需要切换分支修复紧急 Bug。
- - **清理工作区**:需要测试或合并代码时,快速还原干净的工作目录。
- - **保存实验性代码**:临时保存可能不需要长期保留的修改。
- **常用命令**
- **高级用法**
- 1. **保存未跟踪文件**
- 2. **保存特定文件**
- 3. **从 `stash` 创建新分支**
- 4. **查看 `stash` 内容**
- **注意事项**
- - `stash` 仅保存当前分支的修改,与分支无关。
- - 多次 `git stash` 会形成一个栈,恢复时默认按 LIFO 顺序处理。
- - 如果 `stash` 的修改与当前工作区冲突,需手动解决冲突。
- **示例流程**
- 1. **保存修改**
- 2. **切换分支处理紧急任务**
- 3. **恢复修改**
git stash
是 Git 提供的一个功能,用于
临时保存当前工作目录中尚未提交的修改(包括工作区和暂存区的更改),以便在需要时恢复这些修改。它特别适用于以下场景:
核心功能
1. 保存未提交的修改
当你需要切换分支、处理紧急任务或清理工作区时,无需提交未完成的代码,可以使用 git stash
将当前修改保存到一个栈中。
2. 恢复保存的修改
在需要时,可以将之前保存的修改重新应用到工作区,继续开发。
3. 管理多个临时状态
Git 会以栈(LIFO,后进先出)的方式管理多个 stash
记录,支持查看、恢复和删除特定记录。
典型使用场景
- 处理紧急任务:正在开发新功能,但突然需要切换分支修复紧急 Bug。
- 清理工作区:需要测试或合并代码时,快速还原干净的工作目录。
- 保存实验性代码:临时保存可能不需要长期保留的修改。
常用命令
命令 | 功能 |
---|---|
git stash 或 git stash push | 保存当前工作区和暂存区的修改(默认不包含未跟踪文件)。 |
git stash list | 查看所有保存的 stash 记录(如 stash@{0} )。 |
git stash apply [stash@{n}] | 恢复指定的 stash (保留记录)。 |
git stash pop [stash@{n}] | 恢复最近的 stash 并删除记录。 |
git stash drop [stash@{n}] | 删除指定的 stash 记录。 |
git stash clear | 清空所有 stash 记录。 |
高级用法
1. 保存未跟踪文件
默认 git stash
不保存未跟踪文件(untracked
)或被忽略文件(.gitignore
中的文件),需添加参数:
git stash -u
:保存未跟踪文件。git stash -a
:保存未跟踪文件和被忽略文件。
2. 保存特定文件
仅保存部分文件的修改:
git stash push <file-path>
3. 从 stash
创建新分支
直接基于某个 stash
创建新分支并恢复修改:
git stash branch <branch-name> stash@{n}
4. 查看 stash
内容
- 查看简要差异:
git stash show [stash@{n}]
- 查看完整补丁:
git stash show -p [stash@{n}]
注意事项
- stash
仅保存当前分支的修改,与分支无关。
- 多次 git stash
会形成一个栈,恢复时默认按 LIFO 顺序处理。
- 如果 stash
的修改与当前工作区冲突,需手动解决冲突。
示例流程
1. 保存修改
git stash push -m "暂存未完成的功能开发"
2. 切换分支处理紧急任务
git checkout main
# 修复 Bug 后提交
git commit -am "修复紧急 Bug"
3. 恢复修改
git checkout dev
git stash pop # 恢复并删除最近的 stash
通过 git stash
,你可以灵活管理未提交的代码,避免频繁提交或丢失工作进度。