从git-scm的文档中,有两个git stash命令提到与脚本相关,但不是一般用途:
创建
创建一个存储(这是一个常规提交对象)并返回其对象名称,而不将其存储在ref命名空间中的任何位置.这对脚本非常有用.它可能不是你想要使用的命令; 看上面的"保存".
商店
在stash ref中存储通过git stash create(这是一个悬空的合并提交)创建的给定存储,更新存储reflog.这对脚本非常有用.它可能不是你想要使用的命令; 看上面的"保存".
假设我们正在考虑自动化脚本的情况下,做什么优点git stash create和git stash store给我在平时git stash save和朋友吗?
joe*_*dle 12
不幸的是,Andrew在上面展示的好例子并不适用于所有情况,因为:
如果有局部变化,然后git stash create将创建一个未引用的承诺,但它实际上并不会清除局部变化.
如果没有任何本地更改,则根本不会创建提交(如BlackVegetable指出).在那种情况下,我们不应该apply在最后.
(并且未成年人:安德鲁忘记保留并使用由...生成的提交ID create.)
考虑到这一点,在我看来,用法应该是这样的:
# Save the local changes, keep a reference to them, and clear them
stashed_commit="$(git stash create)"
git reset --hard
# Do your thing
git fetch
git rebase
# If there were local changes, then restore them
if [ -n "${stashed_commit}" ]
then git stash apply "${stashed_commit}"
fi
Run Code Online (Sandbox Code Playgroud)
笨拙地说至少!
唉.如果我可以只git stash save --allow-empty在顶部和git stash pop底部,这将简单得多.
我想爱错.请指正!
您可以git stash create在编写需要隐藏的脚本作为实现细节时使用,并且不想打扰用户的存储reflog.
根据接下来发生的情况,您可能(在出现错误的情况下)决定您确实想要打扰藏匿的reflog,此时您可以使用git stash store.
显然,可以用create当时的方式实现常规存储store,但我也可以想象它被用在一个假设的update-branch命令中,它做了这样的事情:
git stash create
git fetch
git rebase
git stash apply
Run Code Online (Sandbox Code Playgroud)