哪个版本的git的文件最终会被用于:LOCAL,BASE或REMOTE?哪个版本的git的文件最终会

2019-06-02 15:35发布

当有期间科里森git merge ,我打开了一个名为合并工具融合在一起 。 它打开三个文件LOCAL,底座和遥控器。 正如我读过LOCAL是我的本地分行,BASE是共同的祖先和遥控器是要合并的分支。

现在我的问题:该文件的版本将最终使用? 它是REMOTE? 如果是的话,我可以编辑它,因为我想,不管什么都在BASE分行的例子吗?

Answer 1:

这是一个在中间: BASE

事实上, BASE是不是共同的祖先,但半成品的合并在冲突都标有>>>><<<<

你可以看到MELD编辑窗口顶部的文件名。

见截图在这里

您可以编辑BASE ,只要你想使用或不使用MELD命令文件。
您也可以摆脱MELD和公正的编辑与你最喜欢的文本编辑器文件。

  • 之间的代码<<<< HEAD=====标记是在合并之前您的本地文件的一个。
  • 之间的代码====>>>> <branch name>是远程文件的一个。


Answer 2:

合并有通过传递第四个参数激活一个隐藏的3路合并功能

meld $LOCAL $BASE $REMOTE $MERGED

左,右窗格以只读模式打开,这样你就可以不小心周围合并走错了路。 中间的面板显示合并的结果。 对于冲突,它显示的基础版本,这样就可以看到所有的重要位:中间原文,并在双方冲突的修改。 最后,当你按下“保存”按钮,在$合并的文件被写入 - 完全按照预期饭桶。

我使用的〜/的.gitconfig文件包含以下设置:

[merge]
tool = mymeld
conflictstyle = diff3
[mergetool "mymeld"]
cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE $MERGED

这将打开3个选项卡,第一次和包含简单的diff我试图合并第二选项卡,然后在第三个标签,默认打开的合并,显示了3路合并视图。

现在,该功能是隐藏的原因是,它没有足够的打磨还。 这是非常有用的,因为它是现在,但启Willadsen的MELD作者,指出了需要熨烫出几道皱纹。 例如有没有GUI来启动3路合并模式,命令行语法是有点晦涩,并且这样的。 如果你讲Python和对你的手一段时间-你知道该怎么做。

编辑:在合并的新版本中,synax稍有变动。 这是在评论,但它属于答案。

该MELD命令现在使用--output选项,因此从上面的代码段最后一行应该是:

cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED


Answer 3:

这也有4个文件:

  1. $LOCAL在哪里要合并分支中的文件; 当显示给你的合并进程不变

  2. $REMOTE从正在合并的分支的文件; 当显示给你的合并进程不变

  3. $BASE的$共同祖先LOCAL和REMOTE $,即。 其中两个分支开始疏导认为文件中的点; 当显示给你的合并进程不变

  4. $MERGED的部分合并的文件,有冲突; 这是通过合并进程感动的唯一文件,实际上,从未显示出你在meld


$MERGED文件是包含了一个<<<<<<>>>>>>===== (和,也许, |||||| )标志(即划定冲突)。 是您手动编辑更正冲突的文件。

手动冲突编辑和视觉冲突的编辑在不同的文件来完成,并呈现出不同的信息。

当使用合并工具(假设meld ),即看到其中的文件是: $LOCAL$BASE$REMOTE 。 请注意,您看不到$MERGED的文件,虽然这是一个隐藏的参数传递给meld写编辑的结果出现。

换句话说,在meld ,您正在编辑在中间,该文件$BASE文件,你选择所有从左边或右边手动更改。 这是一个干净的文件,而不是合并进程感动。 唯一的故障是,当你保存,你不保存到$BASE文件,但在第四个隐藏的参数meld ,即$MERGED文件(你甚至看不到)。 在$BASE文件包含任何冲突或部分成功的合并,因为它不是$MERGED文件

在可视化编辑,呈现给你当$BASE文件(而不是$MERGED文件) git基本上放弃其所有试图做合并(这些尝试是可见的,如果你愿意,在$合并文件),并让您从头开始完全合并。

底线是,在手动和视觉合并冲突你是不是在看相同的文件,但最终的结果是写在同一个文件(也就是$MERGED文件)。

冲突的手动校正上完成$MERGED ,因为git 没有平均为您呈现三个文件,所以它从瓜类三个文件中的信息( $LOCAL$BASE$REMOTE在) $MERGED文件。

但可视化工具你出示三个文件的方式 :他们告诉你的$LOCAL$BASE$REMOTE文件。 你是从采摘的变化$LOCAL$REMOTE文件,你把这些到$BASE文件,完全重新建设和覆盖,甚至是合并的失败的尝试是$MERGED文件。



Answer 4:

科斯明的解决方案工作,但$ BASE文件更新-不是$合并 。 这将更新$合并的文件:

报告: v1.8.4

[merge]
  conflictstyle = diff3
  tool = mymeld
[mergetool "mymeld"]
  cmd = meld --auto-merge --output $MERGED $LOCAL $BASE $REMOTE --diff $BASE $LOCAL --diff $BASE $REMOTE


Answer 5:

随着MELD 1.7托梅克解决方案埋葬不工作了。

默认设置没有满足我:

相反,对于MELD> = 1.7,我建议其他两种解决方案之一。

第一个解决方案

 meld $LOCAL $BASE $REMOTE --auto-merge

解决方法二

 meld $LOCAL $MERGED $REMOTE

的.gitconfig

复制并粘贴此在你.gitconfig如上述文件,以获取解决方案:

[merge]
    tool = meld16
[mergetool "meld17"]
    # use this for Meld >=1.7
    # see http://stackoverflow.com/a/22911793/859591
    # second solution:
    cmd = meld $LOCAL $MERGED $REMOTE
    # first solution:
    #cmd = meld $LOCAL $BASE $REMOTE --auto-merge
[mergetool "meld16"]
    cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED

[include]
    # requires git v1.7.10+
    path = .gitconfig.local

复制并粘贴此在.gitconfig.local文件设置meld17或meld16只为这台机器的情况下,你用你的.gitconfig在多台机器:

# This is a host specific config file!
# Note that git 1.7.10+ is needed
# http://stackoverflow.com/a/9733277/859591
[merge]
    tool = meld17


Answer 6:

我发现没有显示的默认文件中被保存。 MELD是显示$LOCAL$REMOTE$BASE默认。 为了使它工作,我需要让MELD显示$MERGED ,而不是$BASE 。 我把这个~/.gitconfig固定对我来说:

[merge]
        tool = mymeld
[mergetool "mymeld"]
        cmd = meld "$LOCAL" "$MERGED" "$REMOTE"

我使用的拱门,有:

$ git --version
git version 1.8.2
$ meld --version
meld 1.7.1


Answer 7:

出于某种原因,MELD的最新版本不显示添加了冲突标记线(<<<<<<<,=======,>>>>>>>)。 如果你想看到这些行,你应该安装MELD v 1.3.3或以前。



Answer 8:

请参阅萨阿德对正确答案的答案。

随着MELD 1.8.1在Ubuntu上我得到了

错号码提供给--diff参数

并添加--output前$合并固定对我来说:

[mergetool "mymeld"]
cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED


文章来源: Which version of the git file will be finally used: LOCAL, BASE or REMOTE?