假设我的分支有两个存储区。
当我保存另一个存储时,存储索引将更改。 0变成1,1变成2,新的存储设置为0。
添加新存储时是否可以保持存储索引不变?谢谢
答案 0 :(得分:3)
不,这是不可能的。
使用git stash create
而不运行随后的git stash store
,您可以稍微接近一点。然后,您必须创建一个 other 名称来保存隐藏提交(记住,git stash
进行提交,就像git commit
!),以免打扰refs/stash
参考或其任何reflog条目。
git stash apply
命令接受任何指向“类似存储”的提交的引用。 git stash create
创建的任何提交当然都非常隐蔽,因为它 是隐蔽提交。
作为一个非常粗糙的例子:
hash=$(git stash create)
if [ "$hash" == "" ]; then
echo "nothing to save!"
else
git update-ref refs/private-stash $hash
echo "new private-stash created"
fi
及更高版本:
git stash apply refs/private-stash
git update-ref -d refs/private-stash
答案 1 :(得分:1)
这将需要大量脚本。在实践中,我第二次回答了托雷克的问题(“否”),但是为了完整起见,这是您必须要做的:
首先,您需要记下当前存储reflog指向的所有提交ID及其主题消息。您应该在创建新存储之前执行此操作。 (如果已经创建了存储,那么整个混乱情况就比较混乱了。)一种实现方法是
git reflog stash --format=%h %gs
实际上,您要做的是将这些记录在某处,以备将来参考。一种“足够简单”的方法是
git reflog stash --format='-m "%gs" %h' |xargs -n 3 git update-ref --create-reflog temp_stash
与temp-stash
reflog相比,stash
reflog中的条目将被反转,但是很快就会出来。
现在temp_stash
正在跟踪存储条目,您需要清除存储引用及其刷新日志。
git update-ref -d refs/stash
现在,您可以创建新的存储。
git stash
,然后从temp_stash中拉回存储的reflog条目
git reflog temp_stash --format='-m "%gs" %h' |xargs -n 3 git update-ref --create-reflog refs/stash
此再次反转reflog条目的顺序,因此reflog被“按顺序”放回去,并且您创建的新存储被推到末尾。