2016-01-31 55 views
4

雖然做合併/變基,我經常打這樣的場景: - 擊出了一些衝突 - 解決重要的,它們移動到指數Git合併:只保留上演提交和其餘的折騰?

然後,還有一堆不分階段的垃圾,我只是想繼續HEAD版本。理想情況下,我可以做「git commit & & git reset --hard」,但git不會讓我犯下,但仍有未裝入的東西在等待。我嘗試過「git stash save --keep-index」,但是失敗了。我試過「git diff | patch -Rp1」(和各種突變)。我不認爲任何「混帳重置」模式匹配我想要的。

有一種方法可以說「我得到了我想要的東西,然後放棄其餘的東西」。

回答

2

沒有開箱即用的解決方案,但您可以創建一個別名。

您可以使用:

git checkout HEAD -- <list of files to keep as HEAD> 

指定你要保持給定的文件,因爲他們在HEAD

要獲得剩下的衝突的列表,你可以使用:

git diff --name-only --diff-filter=U 

然後把它一起作爲一個別名給出:

alias gitkeeprest="for file in $(git diff --name-only --diff-filter=U); do git checkout HEAD -- $file; done" 

由於在地方,你會:

  • 照常開始合併。
  • 解決您想將它們添加到索引中的部分。
  • 通過運行gitkeeprest將其餘的設置恢復爲HEAD版本。
+0

這並不完美。這將刪除文件中所做的所有更改。我希望找到一個解決方案,在那裏我可以對該文件進行更改並丟棄所有其他文件。 –

+0

@JaredGrubb我建議'git checkout HEAD - ....'在要刪除更改的文件上運行,就像在「unstaged junk ...保持HEAD版本」一樣。我已經編輯了答案,試圖讓它更清晰。 – PeterSW