Git合并:保留暂存提交并丢弃其他提交?

4
在合并/变基时,通常会遇到以下场景: - 遇到一些冲突 - 解决重要的冲突,并将它们移动到索引中
接下来就会有一堆未暂存的垃圾数据,我只想保留 HEAD 版本。理想情况下,我可以直接执行 "git commit && git reset --hard" 命令,但是只要还有未合并的东西,git 就不允许我提交。我尝试了 "git stash save --keep-index",但失败了。我尝试了 "git diff | patch -Rp1" (和各种变形),但都无法满足我的需求。似乎没有任何 "git reset" 模式与我想要的匹配。
肯定有一种方法可以说:“我已经得到了我想要的结果,只需要丢弃其余的东西”。
1个回答

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版本。

这个不太行。这会移除文件中所有的更改。我希望找到一个解决方案,可以在该文件中暂存更改并丢弃其余所有更改。 - Jared Grubb
@JaredGrubb 我建议在你想要删除更改的文件上运行 git checkout HEAD -- ....,就像“未暂存的垃圾...保留HEAD版本”一样。我已经编辑了答案,试图让它更清晰明了。 - PeterSW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接