2016-01-31 31 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