git stash apply 是“只应用不删除”的操作,冲突时保留原 stash 并标记冲突文件,需手动解决后执行 git stash drop;误删可通过 reflog 恢复。

在 Git 中,git stash apply 本身不会自动创建新 stash 记录,它只是把指定 stash(默认是 stash@{0})的内容应用到当前工作区和暂存区。如果应用过程中发生冲突,Git 会暂停合并并标记冲突文件,但不会丢弃 stash 记录——原 stash 依然存在,你可以继续处理冲突、手动解决后完成恢复。
理解 stash apply 的行为特点
与 git stash pop 不同,apply 是“只应用不删除”,适合需要多次尝试或保留备份的场景。冲突发生时:
- Git 停止应用过程,保留冲突标记(如
),工作区变为“未合并”状态 - 原 stash(如
stash@{0})仍保留在 stash 列表中,可用git stash list查看 - 暂存区可能已部分更新(取决于冲突位置),需用
git status确认哪些文件被修改/未合并
解决冲突后继续完成恢复
冲突不是失败,而是 Git 在提示你介入。按以下步骤操作:
在 OpenClaw 中管理 GitHub 仓库、Pull Request、Issue 与工作流。适用于审查 PR、管理 Issue、自动化 GitHub Actions、同步仓库等场景。
- 用编辑器打开冲突文件,手动修改内容,删掉冲突标记,保留期望的代码
- 对每个已解决的文件执行
git add <file></file>,将其标记为“已解决” - 全部解决并
git add后,运行git stash drop(或git stash drop stash@{0})手动删除已成功应用的 stash - 若中途想放弃本次应用,可执行
git stash show -p | git apply -R回滚已应用的改动(慎用),再决定是否重试
避免重复冲突的实用技巧
频繁冲突往往源于分支长期未同步。建议:
- 应用前先更新当前分支:
git pull origin main(或对应目标分支),再git stash apply - 用
git stash apply --index尽量还原原始暂存状态(包括已git add的变更) - 对关键 stash,先用
git stash show -p stash@{0}预览改动,评估与当前代码的兼容性 - 若 stash 内容复杂,可先创建临时分支应用:
git checkout -b temp-stash-branch && git stash apply,验证无误后再合并回主分支
误删或丢失 stash 后的补救方法
stash 本质是特殊 commit,即使被 drop 或 pop,只要没触发 GC,仍可通过 reflog 恢复:
- 运行
git reflog show refs/stash查看 stash 操作历史 - 找到对应 hash(如
abc1234),用git stash apply abc1234重新应用 - 也可用
git show abc1234检查内容,确认是否为目标 stash










