如何检测git stash push提示“无本地变更可保存”的场景?
解决方法
方法一:利用git stash push的退出码判断
git stash push有明确的退出状态:成功创建存储时返回0,无变更可存储时返回1。直接在脚本里捕获这个退出码,就能决定是否执行后续的git stash pop:
# 执行存储并记录退出码 git stash push -a STASH_STATUS=$? # 执行你的其他脚本逻辑... # 只有当存储成功时,才执行恢复操作 if [ $STASH_STATUS -eq 0 ]; then git stash pop fi
这种方式完全不需要解析命令输出,纯依赖程序退出状态,是最直接可靠的方案。
方法二:提前检查是否存在可存储的变更
在执行git stash push -a前,先检查是否有符合-a参数范围的变更(未暂存、已暂存、被忽略的文件),如果没有就直接跳过整个stash流程:
# 检查三类变更:未暂存、已暂存、被忽略的文件 if git diff --quiet && git diff --cached --quiet && ! git ls-files --others --exclude-standard --directory --no-empty-directory | grep -q .; then echo "无需要存储的本地变更" else git stash push -a # 执行你的其他脚本逻辑... git stash pop fi
这里的三个检查分别对应:
git diff --quiet:检查未暂存的文件变更git diff --cached --quiet:检查已暂存的文件变更! git ls-files ... | grep -q .:检查是否存在被忽略的未跟踪文件
方法三:对比存储前后的stash列表长度
存储前先统计当前stash的数量,存储后再次统计,只有当数量增加时才执行pop:
# 记录存储前的stash数量 BEFORE_COUNT=$(git stash list | wc -l) git stash push -a # 记录存储后的stash数量 AFTER_COUNT=$(git stash list | wc -l) # 执行你的其他脚本逻辑... # 数量增加说明创建了新存储,执行恢复 if [ $AFTER_COUNT -gt $BEFORE_COUNT ]; then git stash pop fi
内容的提问来源于stack exchange,提问作者Geoff Alexander
相关产品推荐
相关产品推荐

