You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何一次性保存所有Git stash差异?批量导出各stash差异至独立文件

如何批量将每个Git Stash的差异保存到独立文件?

嘿,这个需求其实用一段简单的shell脚本就能一次性搞定,不用你手动逐个导出每个stash的差异~

方法一:保留stash完整描述作为文件名一部分

直接运行下面这段命令,它会自动遍历所有stash条目,把每个stash的差异补丁保存成独立的.patch文件,文件名里会包含stash编号和原始描述(还会自动替换掉文件名里的非法字符):

git stash list | while read stash_entry; do
    # 提取stash的编号,比如stash@{0}
    stash_name=$(echo "$stash_entry" | cut -d: -f1)
    # 提取stash的描述部分,把非法文件名字符换成横杠
    stash_desc=$(echo "$stash_entry" | cut -d: -f2- | sed 's/[\/:*?"<>|]/-/g')
    # 生成补丁文件
    git stash show -p "$stash_name" > "${stash_name}_${stash_desc}.patch"
done

执行完之后,你会看到类似这样的文件:

  • stash@{0}_-在master分支上完成的工作.patch
  • stash@{1}_-在a001分支上完成的工作.patch

方法二:用分支名作为文件名(更简洁)

如果你觉得完整描述有点冗余,也可以只提取分支名来命名文件,这样文件名会更清爽:

git stash list | while read stash_entry; do
    stash_name=$(echo "$stash_entry" | cut -d: -f1)
    # 从描述里提取分支名(匹配“在XX分支上”里的XX)
    branch_name=$(echo "$stash_entry" | grep -oP '在\K.*?(?=分支上)')
    git stash show -p "$stash_name" > "${stash_name}_${branch_name}.patch"
done

生成的文件就会是:

  • stash@{0}_master.patch
  • stash@{1}_a001.patch

小提示

  • 如果你想验证补丁内容是否正确,可以用cat命令打开文件,比如cat stash@{0}_master.patch
  • 这些.patch文件之后还可以用git apply命令来恢复对应的更改哦

内容的提问来源于stack exchange,提问作者Filipe Freire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:29:25