【问题标题】:Undo IntelliJ Smart Checkout撤消 IntelliJ 智能结帐
【发布时间】:2015-11-25 22:26:50
【问题描述】:

IntelliJ 有一个理论上很酷的功能,称为Smart Checkout。当您更改分支并且当前分支中有已修改但尚未提交的文件时,此功能将启动。

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

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

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

我想要完成的是:

  1. 从主分支中彻底删除更改。
  2. 将它们移回我工作的分支机构。

有没有办法做到这一点?

【问题讨论】:

  • 顺便说一句,丢失这些更改是相当痛苦的......几天的工作。我很乐意让他们回来。
  • 这种魔法正是我更喜欢将 IDE VCS 集成仅用于读取操作并始终在命令行上添加、存储、提交等的原因。无论如何,您可以使用 git 实用程序轻松恢复隐藏的更改(SO 上有很多与此相关的问题,例如stackoverflow.com/questions/89332/…)。
  • 使用 Atlassian Sourcetree 之类的工具会警告您,您的本地更改将被结帐覆盖,这将避免这种情况!我认为像 git tool 这样的命令可能会做同样的事情,但我不是 100% 确定。
  • 我遇到了同样的问题。我希望此功能会隐藏更改并切换到新分支。然后当我回到旧分支时,它会记住它隐藏的内容。

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


【解决方案1】:

如果您在stash pop 期间发生合并冲突,这至少是一个有效的部分答案。正如我在问题中提到的,智能结帐功能使用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

由于此答案非常粗略且仅涵盖一种情况,因此我将其标记为社区 wiki。非常欢迎改进。

【讨论】:

    【解决方案2】:

    由于冲突导致合并失败,存储不会从堆栈中删除,保留未提交的更改。在这种情况下,git stash list 命令应该显示存储。

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

    git checkout -f $original-branch
    

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

    git reset --hard HEAD
    

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

    git stash apply
    

    确认您已完成所有需要的更改,然后删除存储。

    git stash drop
    

    【讨论】:

    • 我只是想回到我的旧分支,但合并冲突不允许我这样做。强制结帐是关键。
    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 2011-12-27
    • 1970-01-01
    • 2010-12-14
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多