如何在 Git 中保存合并状态?

IT *_*her 6 git gitlab git-merge-conflict

我们使用的是 Gitlab 免费自托管 13.8.4-ee。在合并冲突期间,我们希望 Git 按原样保存合并中未解决的冲突的状态,以便我们以后能够继续解决冲突。

我们在 Gitlab UI 的 Merge 工具中检查过,这是不可能的。“合并请求”中的“草稿”选项只会使合并处于非就绪状态,但我们无法保存已解决和未解决的冲突,因为git mergetool会解决与 BASE (共同祖先)版本的未解决冲突,而不是而不是保留本地副本。我们还检查了这在 Beyond Compare 或 Meld 等外部​​合并工具中是不可能的。即使在 Github 的免费版本中检查时,也不允许保存/关闭合并,直到删除所有冲突标记。

有没有办法可以在 Git 中保存当前的合并状态?在TFS中,可以按原样保存当前合并状态。

请检查上一个问题的答案:冲突情况下的 Git merge 将本地副本替换为共同祖先副本

tor*_*rek 4

你不能。

\n

更准确地说,在 Git 中永久保存任何内容(甚至只是一天左右,或出于传输目的等)的方式是进行提交。但是,当您处于冲突合并过程中时,您无法进行任何新的提交。您想要保存内容,以便可以在其他地方继续合并。因此,您处于第 22 条军规的情况:您想要保存冲突,但要做到这一点,您必须首先完全解决冲突,之后就没有冲突需要保存。

\n

Git 确实需要一种工具来实现这一点,并且有几种可能的方法来添加一个,但是 \xe2\x80\x94 据我所知,至少 \xe2\x80\x94 没有人通过添加一个来完成它。

\n

(这不是文件是否有冲突标记的问题,尽管理想情况下“保留部分但有冲突的合并”也会保留然后恢复这些冲突标记。实际问题是索引中有非零暂存号。这些非零暂存编号是阻止写出树的原因,如果没有写树的能力,就无法保存各种文件。)

\n

  • 您一次就可以解决所有冲突。理想情况下,您围绕 git 的工作流程不应产生“很多”冲突。如果你经常遇到有很多冲突的情况,你也应该看看这个过程。例如,您可能有每个人都必须处理的繁忙文件,或者您的合并正在合并许多功能。有纪律的开发人员会推迟路过式重构,而是创建单独的 jira 问题(或其他问题)并稍后在自己的分支上处理它们,而不是收集大型变更集。但也许你只是在重构一切。 (3认同)