如何从未提交的git合并中存储手动解决方案以供日后使用?

时间:2017-07-30 15:08:40

标签: git merge git-merge git-stash

我正在尝试合并一个长期存在的分支,毫不奇怪,有相当多的合并冲突需要解决。一旦冲突得到解决,我已经完成了相当多的工作,git-add - 每个文件。

但是,我现在意识到,对于某些冲突,如果我可以暂时返回到合并前状态,修复文件,然后重新执行合并,至少对于那些文件,解析会更容易。 (具体来说,部分冲突与自动代码格式化工具有关。我希望能够在合并前的分支上运行相同的工具,这样合并只需要处理非自动格式化的变化。)

我知道我可以完全放弃合并,但我有大量的手动分辨率,我不想丢失。有没有办法保存手动分辨率,以便在重做合并后可以重新应用它们?

1 个答案:

答案 0 :(得分:1)

只有一种方法可以永久地或半永久地在Git中保存,这就是提交它们。 (这就是git stash所做的:它提交了提交。它只是在 no 分支上创建它们。)

不幸的是,您无法使用部分合并的索引进行提交。 (更确切地说,如果任何索引条目处于阶段1,2或3中,则无法提交。)

有几种解决方法。他们都不是伟大的。对你的情况来说最好的一个就是使用git worktree(如果你的Git至少是2.6 - 这个功能进入了Git 2.5,但我隐约记得下一次更新中的一些主要错误修复)。对此的主要限制是每个工作树必须位于其自己的唯一分支中。

使用git worktree add将允许您执行您想要的操作,因为每个添加的工作树都会获得自己的索引,以便您可以获取这些预合并状态,并进行修复和合并文件并提交结果。您甚至不必提交结果,因为一旦完成,您可以将合并的结果复制到“主”工作树,然后简单地丢弃添加的工作树。但是你必须在一个单独的分支中工作(只需从你在主工作树中处理的同一个提交中启动新的分支)。

另见temporary commit on complex merge