在 Git 中存储然后重新定基

Stashing then Rebasing in Git

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

我必须从另一个开发分支变基,但我想先存储我的更改。

如果我执行 git 存储然后我 git 重新设置开发分支的基线,我会丢失存储吗?

不,你不会丢失藏品。 Git 很少会删除 refs,除非你明确说明然后再做 gc

您可以安全地存储更改、变基或检出另一个分支,然后 applypop 您存储的更改。如果您执行 git stash pop 并且更改发生冲突,git 将应用您的更改(并显示合并冲突)但不会自动弹出隐藏的提交。

If I do a git stash then I git rebased the dev branch, will I lose the stash?

没有

记住,存储只是 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 可以在变基前自动隐藏。我自己不喜欢这种模式,但如果你喜欢,请参阅 and ,它指出了一个直到 Git 2.14.

才修复的错误

1实际上至少 两次 次提交,有时是三次;但在您开始使用存储进行高级操作之前,它们就像一次提交一样。

2这意味着你不应该命名一个分支 stashGit 如果你这样做就好了,但你可能会感到困惑。 :-)