撤消Intellij智能结账

mli*_*ner 16 git version-control intellij-idea git-stash

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

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

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

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

我想要完成的是:

  1. 从主分支中干净地删除更改.
  2. 将它们移回我工作的分支.

有没有办法做到这一点?

Bat*_*man 13

我参加聚会迟到了,但一想到我因为 IntelliJ 智能结帐而丢失了今天早上的工作,我就有点害怕。所以我想看看是否有解决办法,这个问题首先出现了。

可悲的是,我的 git stash 列表是空的(可能是因为我尝试合并冲突的文件),所以我无法使用其他答案中给出的建议。

我开始查看项目根文件夹的本地历史记录(右键单击编辑器 > 本地历史记录 > 显示历史记录),尝试获取所有丢失的更改,并注意到一个名为Uncomfilled_changes_before_Checkout_at_27_04_2022_12_06__Changes.xml的更改。正如您在屏幕截图中看到的,该文件位于项目的 .idea/shelf 文件夹中。

它与一个几乎同名的文件夹“Uncomfilled_changes_before_Update_at_27_04_2022_12_06_[Changes]”相关联,并且在智能结账后不会很快删除,因为我还有另一对日期为 2022 年 4 月 20 日的文件夹。

该文件夹包含一个shelved.patch文件,该文件以屏幕截图上显示的格式重新组合您的所有更改(我向您保证,我早上的工作不仅仅是添加 console.log)。

这个 shelved.patch 文件由 IntelliJ 的架子功能使用,它允许您查看所有这些更改并根据需要重新应用它们。您可以从菜单栏访问架子(Git > 未提交的更改 > 显示架子)

IntelliJ 搁置我的所有本地更改也是在更新期间发生错误后发生的:合并错误:无法写入 ./git/index

该项目在搁置后正确更新,我可以取消搁置我想要的更改。


mli*_*ner 10

这里至少是一个部分答案,如果您在期间发生合并冲突,则该答案有效stash pop.正如我的问题stash所述,Smart Checkout功能使用它来隐藏您的本地更改,然后在签出后将它们应用到新分支.

Intellij这样做的方法是stash在你目前stash pop所在的分支中使用,然后在你要切换到的分支中使用.

当更改被隐藏时,它们会被置于顶部的一堆隐藏的更改中.然后,在stash pop运行时,这些更改将从堆栈中弹出并应用.

至少,在大多数情况下,这就是发生的事情.但是,如果存在合并冲突,Intellij会通知您,并保留存储.您可以通过运行来查看堆栈:

git stash list
Run Code Online (Sandbox Code Playgroud)

如果仍然列出了您想要的存储,您可以做的只是检查您最初所在的分支.重置它,然后执行stash apply,这就像stash pop,但不会从列表中删除存储.所以:

git checkout $original-branch
git reset HARD
git stash apply
Run Code Online (Sandbox Code Playgroud)

然后,如果一切顺利,您可以删除存储:

git stash drop
Run Code Online (Sandbox Code Playgroud)

由于这个答案非常粗糙,只涉及一种情况,我将其标记为社区维基.非常欢迎改进.


小智 5

由于合并由于冲突而失败,因此不会从堆栈中删除隐藏项,从而保留未提交的更改。在这种情况下,该git stash list命令应显示隐藏信息。

首先强制检出原始分支。这将忽略合并冲突。

git checkout -f $original-branch
Run Code Online (Sandbox Code Playgroud)

然后重置工作目录以删除尝试的合并所做的任何更改。

git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)

之后,应用隐藏的更改。这不会从堆栈中删除隐藏项。

git stash apply
Run Code Online (Sandbox Code Playgroud)

确认您具有所有必需的更改,然后删除存储。

git stash drop
Run Code Online (Sandbox Code Playgroud)