我当前的分支中有一些未提交的更改。
我必须从另一个dev分支重新绑定,但我想先保存我的更改。
如果我做了一个git stash然后我git重新设置dev分支,我会丢失存储吗?
答案 0 :(得分:1)
不,你不会丢失藏品。 Git很少删除引用,除非你明确它,然后做gc
。
您可以安全地存储更改,变基或签出其他分支,然后apply
或pop
您的存储更改。如果您执行git stash pop
并且更改发生冲突,git将应用您的更改(并显示合并冲突),但不会自动弹出存储提交的存储。
答案 1 :(得分:1)
如果我做了一个git stash然后我git重新设置dev分支,我会丢失存储吗?
没有
请记住,存储只是 no 分支上的提交 1 。就像任何提交一样,它会一直存在,直到它再也没有名字了。这意味着,只要它可以通过名称stash
找到它,它仍然在您的存储库中。 2
您最终需要git stash apply
已保存的存储,然后如果一切似乎都有效,git stash drop
已保存的存储将从名称stash
中删除对提交的访问权限。提交实际上会在一段时间后自行消失,但实际上,git stash drop
会将其删除。
请注意,git stash pop
只是git stash apply && git stash drop
:即应用存储,然后如果 Git 认为应用程序有效,请删除存储。如果您将存储应用于您想要的地方以外的其他地方 - 这种情况发生了很多 - 并且 Git 在这里看到成功,那么您现在已经丢失了藏匿处。因此,为了以防万一,最好养成单独申请然后放弃的习惯。
旁注:自Git 2.6版以来,git rebase
可以在重新定位之前自动存储。我自己并不喜欢这种模式,但如果你这样做,请参阅Why won't --autostash option work ??? (used with git pull --rebase)和VonC's answer to a related question,其中注意到在Git 2.14之前未修复的错误。
1 实际上它至少两个提交,有时三个;但是在你开始用藏匿处做高级事情之前,它们就像一次提交一样。
2 这意味着您不应该命名分支stash
。如果你这样做,那么 Git 会很好,但是你可能会感到困惑。 : - )