2015-08-31 89 views
5

Intellij的理論功能非常酷,名爲Smart Checkout。當您更改分支時,此功能會啓動,並且您已修改但尚未提交的當前分支中的文件。撤銷Intellij智能簽出

不是強迫您提交,存儲或擱置您的更改,而是爲您存儲它們,切換分支,然後在新分支中運行stash pop

我想這是你有時想要的,但是我在切換到錯誤的分支時運行了這個。

所以,現在我的master分支全部都是屬於另一個分支的變化,一些文件報告合併衝突,並且我有各種各樣的痛苦。

我想做到的是:

  1. 徹底移除主分支的變化。
  2. 將它們移回我工作的分支。

有沒有辦法做到這一點?

+0

順便說一句,失去這些變化是非常痛苦的....幾天的工作。我很樂意讓他們回來。 – mlissner

+2

這種魔術正是爲什麼我更喜歡使用IDE VCS集成僅用於讀取操作,並且始終在命令行上添加,存儲,提交等。無論如何,您可以輕鬆使用恢復隱藏的更改(有很多與此相關的問題,例如http://stackoverflow.com/questions/89332/how-to-recover-a-dropped-stash-in-git) git實用程序。 – ThiefMaster

+0

使用類似Atlassian Sourcetree的工具會警告您,您的本地更改將被結帳覆蓋,這將避免這種情況!我認爲像git工具這樣的命令可能會做同樣的事情,但我不是100%確定的。 – mvd

回答

5

如果您在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 

因爲這個答案是非常粗糙,只覆蓋一個情況,我標誌着一個社區維基。非常歡迎改進。