git stash简单使用
目录
📦 核心概念:Stash 作为堆栈
🎯 针对 Stash 记录的操作
1. 创建一条新的 Stash 记录(最基本)
2. 查看现有的 Stash 列表
3. 恢复(应用)某一条特定的 Stash 记录
4. 恢复并删除某一条特定的 Stash 记录
5. 删除某一条特定的 Stash 记录
6. 查看某条 Stash 记录的具体内容
7. 从某条 Stash 记录中恢复单个文件
📋 Stash 记录操作命令总结表
💡 最佳实践与建议
git stash
单次记录的操作是 Git 中非常实用的功能,用于临时搁置当前的工作进度。下面我将为你详细解释如何操作单条 stash
记录。
📦 核心概念:Stash 作为堆栈
首先,git stash
的工作方式像一个堆栈 (Stack)——后进先出 (LIFO: Last In, First Out)。你每次执行 git stash
(或 git stash push
)都会将当前未提交的修改压入这个堆栈,形成一条记录。
🎯 针对 Stash 记录的操作
1. 创建一条新的 Stash 记录(最基本)
这是最常用的命令,它会将当前工作目录和暂存区的修改保存为一条新的 stash 记录。
# 在项目的根目录下执行
git stash# 等同于(较新版本的Git)
git stash push# 推荐:添加一段描述信息,便于日后识别
git stash push -m "正在开发登录功能,临时修复紧急bug"
效果:你的工作目录会变得干净,回到上一次提交的状态。所有未提交的修改都被打包成一条 stash 记录,并放在堆栈的顶部(最新位置)。
2. 查看现有的 Stash 列表
要操作单条记录,首先得知道有哪些记录。
# 查看 stash 堆栈的列表摘要
git stash list
# 显示更详细的信息(如具体的文件变更)
git stash list --stat
输出示例:
stash@{0}: On main: 正在开发登录功能,临时修复紧急bug
stash@{1}: On main: 实验性代码,尝试新API
stash@{2}: On main: WIP on feature-branch
-
stash@{0}
是最新(最近)的记录。 -
stash@{1}
是上一次的记录,依此类推。 -
On main
表示创建 stash 时所在的分支是main
。
3. 恢复(应用)某一条特定的 Stash 记录
默认的 git stash pop
会应用最新的 stash@{0}
并删除它。如果你想应用一条特定的旧记录,并保留它:
# 应用指定的 stash 记录,但不从堆栈中删除
git stash apply stash@{1}
# 应用最新的 stash,等同于 `git stash apply stash@{0}`
git stash apply
提示:apply
命令不会自动删除这条记录,它还会留在列表中。
4. 恢复并删除某一条特定的 Stash 记录
如果你想应用一条记录并立即从堆栈中移除它:
# 弹出并应用指定的 stash 记录,然后删除它
git stash pop stash@{1}
# 弹出并应用最新的 stash(最常用)
git stash pop
5. 删除某一条特定的 Stash 记录
如果你觉得某条 stash 记录没用了,想直接丢弃它,而不应用它的修改:
# 删除指定的 stash 记录
git stash drop stash@{1}
# 删除最新的 stash 记录
git stash drop
6. 查看某条 Stash 记录的具体内容
在决定应用或删除前,你可以先看看这条 stash 里到底改了些什么。
# 显示 stash 记录的差异(具体改了哪些代码)
git stash show stash@{1}
# 显示更详细的差异(git diff 格式)
git stash show -p stash@{1}
提示:显示不全可以点击回车继续显示,或者按q退出
7. 从某条 Stash 记录中恢复单个文件
这是一个高级但非常有用的技巧!你不需要恢复整个 stash,可以只取出其中一个文件。
# 1. 先使用 `git stash show -p` 查看你想恢复的文件路径
git stash show -p stash@{1} -- path/to/file.js
# 2. 使用 `git checkout` 从特定的 stash 中检出那个文件
git checkout stash@{1} -- path/to/file.js
# 或者使用 `git restore` (较新版本的Git)
git restore --source stash@{1} -- path/to/file.js
效果:只有 path/to/file.js
这个文件的修改会被恢复到你的工作目录,其他文件的修改仍保留在 stash 中。
📋 Stash 记录操作命令总结表
你想做的事 | 命令 | 说明 |
---|---|---|
创建一条新记录 | git stash push -m "描述" | 保存当前工作,附带描述信息 |
查看记录列表 | git stash list | 查看所有 stash 记录 |
查看某条内容 | git stash show -p stash@{n} | 显示某条记录的详细代码差异 |
应用一条记录 | git stash apply stash@{n} | 恢复该记录,但不删除它 |
应用并删除 | git stash pop stash@{n} | 恢复该记录,并删除它 |
删除一条记录 | git stash drop stash@{n} | 直接丢弃,不恢复 |
恢复单个文件 | git checkout stash@{n} -- <file> | 只从记录中恢复一个文件 |
💡 最佳实践与建议
-
务必加描述 (
-m
):git stash push -m "描述性信息"
能让你在几天后还能记起这条 stash 是干什么的。 -
分支关联性: stash 记录并不绑定到特定分支。你可以在分支 A 创建 stash,然后切换到分支 B 再
apply
它。这非常有用,但也可能导致冲突。 -
清理旧记录: 定期使用
git stash list
检查并git stash drop
掉那些不再需要的旧记录,保持堆栈整洁。 -
替代方案: 对于复杂的、需要长期搁置的工作,创建一个临时分支 (
git checkout -b temp-branch
) 并进行一次提交,可能是比stash
更清晰的管理方式。
掌握这些针对单条 stash
记录的操作,能让你更加灵活和高效地管理正在进行中的工作。