Intellij在理论上非常酷,称为Smart Checkout。当您更改分支并且当前分支中有您已修改但尚未提交的文件时,此功能会启动。
而不是强迫您提交,存储或搁置您的更改,而是为您存储它们,切换分支,然后在新分支中运行stash pop
。
我想这有时是你想要的,但我在切换到错误的分支时运行了这个。
所以,现在我的master
分支充满了属于另一个分支的变化,一些文件报告了合并冲突,我有各种各样的痛苦。
我想要完成的是:
有办法做到这一点吗?
答案 0 :(得分:9)
如果您在stash pop
期间发生合并冲突,那么至少部分答案是有效的。正如我的问题所述,Smart Checkout功能使用stash
来隐藏您的本地更改,然后在签出后将它们应用于新分支。
Intellij执行此操作的方法是在您当前所在的分支中使用stash
,然后在您要切换到的分支中使用stash pop
。
当更改被隐藏时,它们会被置于顶部的一堆隐藏更改中。然后,当stash pop
运行时,这些更改将从堆栈中弹出并应用。
至少在大多数情况下,会发生什么。但是,如果存在合并冲突,Intellij会通知您,并保留存储。您可以通过运行来查看堆栈:
git stash list
如果仍然列出了您想要的藏匿,那么您可以做的只是检查您最初所在的分支。重置它,然后执行stash apply
,类似于stash pop
,但不会从列表中删除存储。所以:
git checkout $original-branch
git reset HARD
git stash apply
然后,如果一切顺利,您可以使用以下命令删除存储:
git stash drop
由于这个答案非常粗略,只涉及一种情况,我将其标记为社区维基。非常欢迎改进。
答案 1 :(得分:3)
由于冲突导致合并失败,因此不会从堆栈中删除存储,从而保留未提交的更改。在这种情况下,git stash list
命令应显示存储。
首先强行检查原始分支。这忽略了合并冲突。
git checkout -f $original-branch
然后重置工作目录以删除尝试合并所做的任何更改。
git reset --hard HEAD
之后,应用隐藏的更改。这不会从堆栈中删除存储。
git stash apply
确认您已完成所有必要的更改,然后删除存储。
git stash drop