在Git中存储然后重新绑定

时间:2018-06-05 23:38:12

标签: git rebase

我当前的分支中有一些未提交的更改。

我必须从另一个dev分支重新绑定,但我想先保存我的更改。

如果我做了一个git stash然后我git重新设置dev分支,我会丢失存储吗?

2 个答案:

答案 0 :(得分:1)

不,你不会丢失藏品。 Git很少删除引用,除非你明确它,然后做gc

您可以安全地存储更改,变基或签出其他分支,然后applypop您的存储更改。如果您执行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 会很好,但是你可能会感到困惑。 : - )