如何在非冲突合并中获得GIT的3向合并?

Ale*_*tor 5 git version-control merge kdiff3

如何在GIT中禁用自动合并?

目的是在调用命令链期间具有与自动合并中的冲突合并解析相同的行为:

$ git fetch
$ git merge some_branch
$ git mergetool
Run Code Online (Sandbox Code Playgroud)

在合并冲突的情况下,最后一个命令引导我们对文件进行3向合并.我想有一个简单的方法在没有冲突合并的情况下对文件执行相同的3向合并.

我在互联网上找不到任何解决方案,有没有?

我有一些解决方法,但它宁愿避免它.

提前致谢,

阿莱克斯

Chr*_*sen 6

对于仅在一侧或另一侧进行的更改,您可以通过取消设置merge属性来阻止自动合并(请参阅"执行三向合并"下的gitattributes).为缺少merge属性的路径名(或将其设置为"binary")进行合并将使工作树中的当前分支保留版本,并使路径名的索引条目保持冲突状态.

如果您想鼓励每个人以这种方式工作,您可以将其放入.gitattributes文件并提交.如果您只想为自己执行此操作,可以将其放入未提交的.gitattributes文件中或将其放入存储库的$GIT_DIR/info/attributes文件中(您可以随意添加/删除/重命名以启用/禁用该属性).

#    repository/.git/info/attributes
# OR
#    .gitattributes
* -merge
Run Code Online (Sandbox Code Playgroud)

如果双方都进行了相同的更改,即使这种配置也不会引起冲突.


Von*_*onC 5

诀窍是,git解决合并的方式是:

  • 总是基于3向合并(因为提交图允许非常容易地获得共同的祖先)
  • 总是无缝地除了冲突(过程得到你的帮助)

因此,即使您定义了合并驱动程序,除非存在某种冲突,否则它不会启动.


第一个尝试的设置是定义合并属性Unset

取消设置

将当前分支中的版本作为暂定合并结果,并声明合并存在冲突.这适用于没有明确定义的合并语义的二进制文件.

你会写一个.gitattributes文件

 * -merge
Run Code Online (Sandbox Code Playgroud)

,并查看是否足以在所有合并文件上触发mergetool .


这种"未设置"功能不是直接选择的一个原因git merge是:

  • 合并是DVCS主要特征
  • 合并是在树级完成的(考虑到所有项目)

尝试在文件级别取消设置3向合并不是合并过程的一部分(再次,在树级别的原因).
因此它更适合作为可以为特定文件集设置的属性.

  • 呃,你实际上并没有写"merge = Unset".Unset是一个状态,"Unset"的语法是"-merge".该联机帮助页的顶部解释了状态与语法(尽管不是以易于扫描的方式). (3认同)