mli*_*ner 16 git version-control intellij-idea git-stash
Intellij在理论上非常酷,称为Smart Checkout.当您更改分支并且当前分支中有您已修改但尚未提交的文件时,此功能会启动.
而不是强迫您提交,存储或搁置您的更改,它会为您存储它们,切换分支,然后stash pop在新分支中运行.
我想这有时是你想要的,但我在切换到错误的分支时运行了这个.
所以,现在我的master分支充满了属于另一个分支的变化,一些文件报告合并冲突,我有各种各样的痛苦.
我想要完成的是:
有没有办法做到这一点?
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)。
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)