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. 最常用的场景:保存当前进度

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


这个命令会做三件事:

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

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

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

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

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

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


2. 恢复保存的进度

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

# 查看当前储藏栈里有哪些记录
git stash list


输出示例:

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


恢复有两种常用方式:

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

    bash

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

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

  • pop:弹出,并删除记录

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

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

3. 管理和清理

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

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

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

# 删除所有储藏
git stash clear


4. 创建带注释的储藏

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

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

5. 应用到其他分支

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

# 切换到目标分支
git checkout 另一个分支

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


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

6. 从储藏中创建新分支

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

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


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

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

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

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


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

特别提醒:潜在冲突

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴国进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值