切分支前 stash 了一把,回来 pop 报 CONFLICT,解决完发现新建的两个文件没回来。git stash list 里那条记录也不见了。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
git stash push -u -m 'wip-order'
git stash apply stash@{0}
git stash show -p --include-untracked stash@{0}
默认 stash 只保存已跟踪文件的改动,未跟踪的新文件要加 -u 才会一起存。pop 在冲突时虽然保留记录,但解决过程里很容易顺手 checkout 把工作区覆盖掉。这一点先确认清楚,后面就不用反复试。
「stash 冲突恢复」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
具体做法是,git stash list 确认记录还在 不在就查 git fsck --lost-found;用 git stash apply 代替 pop 应用 保留记录便于重来;加 -u 重存一次 把未跟踪文件带上;冲突时先 git stash show -p 看完整改动再动手;恢复完 git status 核对文件数。
改完照着核一遍,stash list 里记录还在 新建文件和改动数量与 stash 时一致。
