我打破了自己的规则,即在我的git stash堆栈中拥有多个项目,我git stash pop
将其中两个而不是一个。
这意味着我有两组更改,没有冲突,现在是无法跟踪的未跟踪更改, 1 。
有没有办法使隐藏/弹出式应用程序具有交互性,并在继续之前检查我是否没有跟踪或未跟踪的更改?
1 如果有冲突,我可以像Actually undo git stash pop一样使用reset
答案 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 pop
和git stash apply
。
根据是否存在本地更改,命令git diff-index --quiet HEAD
将返回0或1,然后&&
和||
快捷方式将继续git stash pop / apply或输出错误消息。
用大括号括住使用&&
快捷方式的第一部分(因此是{ a && b; } || c
)可以防止在弹出或应用失败时触发使用||
快捷方式的错误消息。
然后,您可以使用git pop
安全地运行git stash pop
,而不会干扰其他更改。