Git merge:只保留阶段提交并抛弃其余部分?

时间:2016-01-31 00:18:44

标签: git

在进行合并/ rebase时,我经常遇到这种情况:   - 遇到一些冲突   - 解决重要问题,将其移至索引

然后,有一堆未分级的垃圾,我只想保留HEAD版本。理想情况下,我可以做" git commit&& git reset --hard",但git不会让我承诺,而仍然未合并的东西待定。我试过" git stash save --keep-index"但那失败了。我试过" git diff |补丁-Rp1" (和各种突变)。我不认为任何" git reset"模式匹配我想要的。

只需要说出一种方式"我得到了我想要的东西,只是放弃其余的"。

1 个答案:

答案 0 :(得分: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"

有了这个,你会:

  • 照常开始合并。
  • 解析您感兴趣的部分,将它们添加到索引中。
  • 通过运行HEAD
  • 将其余部分恢复为gitkeeprest版本