Git stash 的完整用法

1. 基础用法

(1) 保存当前修改(默认 stash)

git stash

或(推荐添加描述信息):

git stash push -m "描述信息"

说明

  • 保存当前 工作目录(unstaged changes)暂存区(staged changes) 的修改。
  • 默认 stash 名称为 WIP on <branch>(如 WIP on main: 123abc Fix bug)。

(2) 查看所有 stash 列表

git stash list

输出示例

stash@{0}: On main: 临时修复登录问题
stash@{1}: WIP on feature/add-user: 9e8c7d6 临时代码
  • stash@{n} 是 stash 的索引,n 从 0 开始(最新 stash 是 stash@{0})。
  • On main 表示 stash 时的分支名。

(3) 恢复 stash

恢复最新 stash(默认 stash@{0}
git stash pop
  • pop:恢复并 删除 该 stash(恢复后 stash 列表会减少)。
恢复指定 stash
git stash pop stash@{1}
仅恢复但不删除 stash
git stash apply stash@{1}
  • apply:恢复但不删除 stash(stash 仍然存在)。

(4) 删除 stash

删除最新 stash
git stash drop
删除指定 stash
git stash drop stash@{1}
删除所有 stash
git stash clear

⚠️ 注意clear永久删除所有 stash,慎用!


2. 高级用法

(1) 只 stash 未暂存的修改(不 stash staged 文件)

git stash push --keep-index
  • --keep-index:只 stash 工作目录的修改不 stash 已 git add 的文件

(2) 只 stash 指定的文件

git stash push path/to/file1 path/to/file2

或(使用通配符):

git stash push *.js
  • 仅 stash 指定的文件,其他修改保持不变。

(3) 只 stash 已暂存的修改(不 stash 未 add 的文件)

git stash push --staged
  • --staged:只 stash git add 的修改不 stash 未暂存的修改

(4) 查看 stash 的详细改动

git stash show -p stash@{1}
  • -p:显示具体代码差异(类似 git diff)。
  • 不加 -p 时,仅显示文件变更统计(如 2 files changed)。

(5) 从 stash 恢复单个文件

git checkout stash@{1} -- path/to/file
  • 仅恢复 stash@{1} 中的某个文件,不恢复整个 stash。

(6) 将 stash 转为新分支

git stash branch new-branch-name stash@{1}
  • 基于 stash@{1} 创建一个新分支 new-branch-name,并自动 pop 该 stash。

3. 常见场景

场景 1:临时切换分支,但不想提交当前修改

git stash        # 暂存当前修改
git checkout other-branch
# 处理其他任务...
git checkout main
git stash pop    # 恢复暂存的修改

场景 2:误删 stash,如何恢复?

Git 不会自动删除 stash,但如果 git stash clear 了,可以尝试:

git fsck --unreachable | grep commit | awk '{print $3}' | xargs git log --no-walk

查找可能的 stash 提交,然后手动恢复。

场景 3:只 stash 部分修改

git stash push -m "临时保存登录页修改" -- src/login.js
  • 只 stash src/login.js 的修改,不影响其他文件。

4. 总结

操作命令
暂存所有修改git stashgit stash push -m "描述"
查看 stash 列表git stash list
恢复最新 stashgit stash pop
恢复指定 stashgit stash pop stash@{1}
恢复但不删除git stash apply stash@{1}
删除 stashgit stash drop stash@{1}
清空所有 stashgit stash clear
只 stash 未暂存文件git stash push --keep-index
只 stash 已暂存文件git stash push --staged
只 stash 指定文件git stash push path/to/file
查看 stash 差异git stash show -p stash@{1}
恢复单个文件git checkout stash@{1} -- path/to/file
转为新分支git stash branch new-branch stash@{1}

掌握这些用法后,你可以更灵活地管理临时修改,避免不必要的提交或丢失代码! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值