如果我有任何文件更改,是否可以防止git stash pop / apply?

时间:2019-03-26 11:31:30

标签: git git-stash

我打破了自己的规则,即在我的git stash堆栈中拥有多个项目,我git stash pop将其中两个而不是一个。

这意味着我有两组更改,没有冲突,现在是无法跟踪的未跟踪更改, 1

有没有办法使隐藏/弹出式应用程序具有交互性,并在继续之前检查我是否没有跟踪或未跟踪的更改?


1 如果有冲突,我可以像Actually undo git stash pop一样使用reset

1 个答案:

答案 0 :(得分:2)

您可以为git stash pop创建别名,也可以应用别名来检查与HEAD的差异。

[alias]
    pop = !"f() { { git diff-index --quiet HEAD && git stash pop \"$@\"; } || echo \"Can't pop, you have local changes\"; }; f "
    apply = !"f() { { git diff-index --quiet HEAD && git stash apply \"$@\"; } || echo "Can't apply, you have local changes"; }; f"

使用!前缀并将其包装在函数调用f() { ... }; f "中,可以将参数传递到git stash popgit stash apply

根据是否存在本地更改,命令git diff-index --quiet HEAD将返回0或1,然后&&||快捷方式将继续git stash pop / apply或输出错误消息。

用大括号括住使用&&快捷方式的第一部分(因此是{ a && b; } || c)可以防止在弹出或应用失败时触发使用||快捷方式的错误消息。

然后,您可以使用git pop安全地运行git stash pop,而不会干扰其他更改。