![](/img/trans.png)
[英]What are the conceptual differences between Merging, Stashing and Rebasing in Git?
[英]Stashing then Rebasing in Git
我在当前分支中有一些未提交的更改。
我必须从另一个dev分支重新定基,但是我想先存储我的更改。
如果我执行git stash,然后git重新调整了dev分支的基础,是否会丢失stash?
如果我执行git stash,然后git重新调整了dev分支的基础,是否会丢失stash?
没有。
记住,隐藏只是没有分支的提交1 。 像任何提交一样,它会一直保留直到不再有名称为止。 这意味着,只要可以通过stash
名称找到它,它就仍在您的存储库中。 2
您最终将需要git stash apply
保存的stash,然后,如果一切似乎都可行,则git stash drop
保存的stash以从名称stash
删除对提交的访问。 实际上,提交会在一段时间后自行消失,但实际上, git stash drop
会将其删除。
请注意, git stash pop
只是git stash apply && git stash drop
:即应用该stash,然后,如果Git认为该应用程序有效,则删除该stash。 如果您将隐藏存储应用到了您想要的地方以外的地方(这种情况经常发生),并且Git在这里看到了成功,那么您现在就失去了存储存储。 因此,以防万一,最好养成分开应用然后放下的习惯。
旁注:从Git版本2.6开始, git rebase
可以在重新建立基础之前自动隐藏。 我本人不喜欢这种模式,但是如果您喜欢,请参阅--autostash选项为何不起作用? (与git pull --rebase一起使用)和VonC对一个相关问题的回答 ,其中指出了直到Git 2.14才修复的错误。
1实际上至少是两次提交,有时是三个; 但是直到您开始使用存储进行高级操作之前,它们的作用就像一次提交一样。
2这意味着您不应命名分支stash
。 如果您这样做的话, Git会很好,但是您可能会感到困惑。 :-)
不,你不会丢掉藏匿处 。 Git很少会删除引用,除非您明确地引用它,然后再执行gc
。
您可以安全地存储更改,重新设置基础或签出另一个分支,然后apply
或pop
的更改。 如果您执行git stash pop
且更改发生冲突,则git将应用您的更改(并显示合并冲突),但不会自动将stash从隐藏的提交中弹出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.