如何在 GIT 中禁用自动合并?
目的是在调用命令链期间与自动合并中的冲突合并解决方案具有相同的行为:
$ git fetch
$ git merge some_branch
$ git mergetool
最后一个命令会导致我们在合并冲突的情况下进行文件的3向合并。我希望有一种简单的方法可以在没有冲突合并的情况下对文件执行相同的3向合并。
我在互联网上找不到任何解决方案,有没有?
我有一些解决方法,但它宁愿避免它。
提前致谢,
阿莱克斯
答案 0 :(得分:6)
对于仅在一侧或另一侧进行的更改,您可以通过取消设置merge
属性来阻止自动合并(请参阅“执行三向合并”下的gitattributes)。为缺少merge属性的路径名(或将其设置为“binary”)进行合并将使工作树中当前分支的版本保留,并使路径名的索引条目处于冲突状态。
如果您想鼓励每个人以这种方式工作,您可以将其放入.gitattributes
文件并提交。如果您只想自己做,可以将它放在一个未提交的.gitattributes
文件中,或者将它放在存储库的$GIT_DIR/info/attributes
文件中(您可以随意添加/删除/重命名以启用/禁用属性)。
# repository/.git/info/attributes
# OR
# .gitattributes
* -merge
如果双方都进行了相同的更改,即使这种配置也不会引起冲突。
答案 1 :(得分:5)
诀窍是,the way git solves merges是:
因此,即使您定义了merge driver,除非存在某种冲突,否则它不会启动。
要尝试的第一个设置是定义merge attribute Unset
取消设置
将当前分支中的版本作为暂定合并结果,声明合并有冲突。这适用于没有明确定义的合并语义的二进制文件。
您可以使用.gitattributes
文件
* -merge
,看看是否足以在所有合并文件上触发mergetool。
这种“未设置”功能不能直接作为git merge
的选项的一个原因是:
尝试在文件级别取消设置3向合并不是合并过程的一部分(再次,在树级别的原因)。
因此它更适合作为可以为特定文件集设置的属性。