git stash 用法详解

总结速查表

命令 作用
git stash 保存所有已跟踪文件的修改
git stash -u 保存所有修改(包括新文件)
git stash list 查看所有保存的记录
git stash apply 恢复最近一次保存,保留记录
git stash pop 恢复最近一次保存,并删除该记录
git stash drop stash@{0} 删除指定记录
git stash clear 清空所有储藏
git stash push -m "msg" 保存并添加注释
git stash branch new-branch 从储藏内容创建新分支

git stash 非常适合在需要临时切换任务时,用来保护你半成品的代码。

简单来说,就是"我想把目前的修改藏起来,让我先做别的事情,之后再恢复回来"。

为什么需要 git stash

假设你正在当前分支开发一个新功能,修改了几个文件。突然,线上出现了一个紧急Bug需要你立刻修复。你不能提交当前未完成的新功能(因为代码不完整),也不希望丢失这些进度。这时,你就可以用 stash


1. 最常用的场景:保存当前进度

bash 复制代码
# 把当前的修改(已跟踪的文件,默认不包括新文件)保存起来
git stash
复制代码

这个命令会做三件事:

  1. 把工作区和暂存区的修改都保存到一个"储藏栈"里。

  2. 把你当前的工作区恢复成上一次提交(HEAD)的状态。

  3. 现在你的工作区是完全干净的,可以切换到其他分支去修复Bug了。

补充:保存新文件(未跟踪的文件)

默认情况下,git stash 不会保存新创建(未被 Git 跟踪)的文件。如果需要保存它们:

bash 复制代码
# 把包括新文件在内的所有修改都保存起来
git stash -u

# 或者保存所有内容(包括被忽略的文件,如 .gitignore 里的文件),很少用到
git stash -a
复制代码

2. 恢复保存的进度

当你修复完紧急Bug,回到原来的分支后,需要把之前藏起来的修改取回来。

bash 复制代码
# 查看当前储藏栈里有哪些记录
git stash list
复制代码

输出示例:

bash 复制代码
stash@{0}: WIP on main: 4a7b2e9 刚刚提交的某个信息
stash@{1}: On feature: 测试
复制代码

恢复有两种常用方式:

  • apply:应用,但保留储藏记录

    bash

    复制代码
    # 应用最近一次(stash@{0})的储藏
    git stash apply
    
    # 应用指定的一个储藏
    git stash apply stash@{1}

    应用后,储藏记录会继续留在列表中。

  • pop:弹出,并删除记录

    bash 复制代码
    # 应用最近一次的储藏,成功后从列表中删除
    git stash pop
    复制代码

    这通常是你做完工作后最常用的方式。

3. 管理和清理

bash 复制代码
# 查看具体的储藏内容(看看当时改了哪些文件)
git stash show

# 查看更详细的改动内容(展示代码差异)
git stash show -p

# 删除一个特定的储藏
git stash drop stash@{0}

# 删除所有储藏
git stash clear
复制代码

4. 创建带注释的储藏

当藏得比较多时,给每个储藏加个说明会很有帮助。

bash 复制代码
git stash push -m "正在开发用户登录功能,还没完成"
这样在 git stash list 里就能看到这个说明,方便记忆。

5. 应用到其他分支

这是stash的一个强大用法。你把修改藏起来,然后切换到另一个分支,想把这些修改带过来。

bash 复制代码
# 切换到目标分支
git checkout 另一个分支

# 把之前藏的修改应用到当前分支
git stash apply
复制代码

注意:如果两个分支的文件差异很大,可能会产生冲突,需要手动解决。

6. 从储藏中创建新分支

如果你发现基于当前分支的储藏,想放到一个新的独立分支上去开发,这是最快捷的方法。

bash 复制代码
# 基于储藏内容创建一个新分支,并切换过去
git stash branch new-branch-name
复制代码

这条命令会帮你自动完成:创建分支 -> 切换到分支 -> 应用储藏 -> 删除该储藏。

7. 交互式储藏(部分文件)

如果你不想把当前所有修改都藏起来,只想藏特定的几个文件:

bash 复制代码
# 使用 -p(patch)参数,Git 会询问你每个文件的每一处改动是否要 stash
git stash -p
复制代码

然后按 y(要)或 n(不要)来选择。

特别提醒:潜在冲突

  • 当你 stash applystash pop 时,如果当前工作区的文件和你藏起来的文件有修改冲突,Git 会把冲突标记出来,需要你手动解决。储藏记录不会自动删除(pop 在冲突时也不会删除)。

  • 建议在 stash 前,工作区最好是干净的,或者明确知道没有冲突风险。

相关推荐
木雷双雄72 小时前
Git 版本回退操作指南
git
m0_5791466512 小时前
已被 Git 追踪的本地修改文件如何实现临时忽略
git
糖少主14 小时前
WSL中使用Beyond Compare 3/4/5作为difftool
git·wsl·beyond compare·difftool
console.log('npc')17 小时前
Git版本管控:git reset \+ git push \-f 原理、实操与避坑指南
git
恋喵大鲤鱼21 小时前
git reflog
git·git reflog
MatrixOrigin1 天前
MatrixOne Git4Data 技术详解(二):从零跑通所有 Git 原语
git
anew___1 天前
常用的 Git 工作流
git
shimly1234561 天前
git diff 生成一部分文件的补丁
git
m0_579146651 天前
Git 重置模式详解:四种重置方式的原理与应用场景
git