建议我使用avoid git pull --autostash
,而改用:
git alias.pull-autostash '!git stash push && git pull --rebase && git stash pop'
当索引或工作树没有变化时,请执行以下操作:
$ git stash push
给予:
No local changes to save
另一个问题是退出状态为0
。
然后,任何stash pop
都会pop
某个未被推送的内容。
如何强制创建空白存储区,例如git commit --allow-empty
?
答案 0 :(得分:3)
对于脚本编写,请使用git stash create
(在标准输出中生成所创建存储的哈希ID,如果未创建存储,则在标准输出中不生成哈希ID)。然后,只要且仅当实际创建一个存储时,您才能使用git stash store
将创建的存储作为stash@{0}
插入。
如果您的Git太旧而无法使用git stash create
,则可以在运行git rev-parse
之前和之后在refs/stash
上运行两个git stash save
命令。 1 这些可以:
因此,如果您使用--quiet --verify
并捕获每个输出的实际输出,则可以判断是否已创建存储。也就是说,此处适用的编程片段为:
old=$(git rev-parse --quiet --verify refs/stash)
git stash save || die ...
new=$(git rev-parse --quiet --verify refs/stash)
if [ "$old" != "$new" ]; then
made_stash=true
else
made_stash=false
fi
... do things ...
if $made_stash; then ... do things with the stash you made ...
(我建议避免使用git stash
和 git pull
,除非在非常有限的特殊情况下使用。我对它们有太多不良经验。)
1 如果您的Git缺少git stash create
,它也可能早于git stash push
,因此您需要git stash save
。
答案 1 :(得分:1)
此答案不能回答您如何进行空的更改,但可以解决您的问题。
首先检查是否有待处理的更改(请参见https://stackoverflow.com/a/3879077/3526980)
$ git alias.pull-autostash '(git diff-index --quiet HEAD -- && git pull --rebase) || (git stash push && git pull --rebase && git stash pop)'