撤消Intellij智能结账

时间:2015-08-31 19:46:47

标签: git intellij-idea version-control git-stash

Intellij在理论上非常酷,称为Smart Checkout。当您更改分支并且当前分支中有您已修改但尚未提交的文件时,此功能会启动。

而不是强迫您提交,存储或搁置您的更改,而是为您存储它们,切换分支,然后在新分支中运行stash pop

我想这有时是你想要的,但我在切换到错误的分支时运行了这个。

所以,现在我的master分支充满了属于另一个分支的变化,一些文件报告了合并冲突,我有各种各样的痛苦。

我想要完成的是:

  1. 从主分支中彻底删除更改。
  2. 将它们移回我工作的分支。
  3. 有办法做到这一点吗?

2 个答案:

答案 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