如何配置Git让stash操作(含stash drop记录)被reflog跟踪?
Git stash drop 后记录的跟踪配置方案
默认情况下,git stash drop 删除的stash提交不会出现在常规reflog中,因为Git对refs/stash这个引用的变更默认不生成reflog条目。要提前启用跟踪机制,有两种可行方案:
1. 启用全局/仓库级的全引用reflog记录
通过配置让Git跟踪所有引用的变更(包括stash),操作如下:
- 全局生效(所有仓库):
git config --global core.logAllRefUpdates true - 仅当前仓库生效:
git config core.logAllRefUpdates true
开启后,所有git stash相关操作(包括drop)都会被记录到refs/stash的reflog中。后续可以通过以下命令查看被删除的stash记录:
git reflog show refs/stash
恢复时直接使用对应哈希执行git stash apply <哈希值>即可。
2. 自定义安全删除别名替代原生stash drop
如果不想全局开启全引用日志,可以创建一个自定义别名,在执行删除前手动记录stash到reflog:
git config --global alias.stash-drop-safe '!f() { local stash=${1:-stash@{0}}; git update-ref -m "drop $stash" refs/stash/reflog $(git rev-parse $stash) && git stash drop $stash; }; f'
之后用git stash-drop-safe代替git stash drop删除stash,被删除的记录会被存入refs/stash/reflog,查看命令同上。
注意:如果已经执行了原生的git stash drop且未提前配置,仍只能通过git fsck --lost-found查找悬空提交来恢复,上述方案仅对配置后的操作生效。
内容的提问来源于stack exchange,提问作者SRobertJames
相关产品推荐
相关产品推荐

