当有期间科里森git merge
,我打开了一个名为合并工具融合在一起 。 它打开三个文件LOCAL,底座和遥控器。 正如我读过LOCAL是我的本地分行,BASE是共同的祖先和遥控器是要合并的分支。
现在我的问题:该文件的版本将最终使用? 它是REMOTE? 如果是的话,我可以编辑它,因为我想,不管什么都在BASE分行的例子吗?
当有期间科里森git merge
,我打开了一个名为合并工具融合在一起 。 它打开三个文件LOCAL,底座和遥控器。 正如我读过LOCAL是我的本地分行,BASE是共同的祖先和遥控器是要合并的分支。
现在我的问题:该文件的版本将最终使用? 它是REMOTE? 如果是的话,我可以编辑它,因为我想,不管什么都在BASE分行的例子吗?
这是一个在中间: BASE
。
事实上, BASE
是不是共同的祖先,但半成品的合并在冲突都标有>>>>
和<<<<
。
你可以看到MELD编辑窗口顶部的文件名。
见截图在这里
您可以编辑BASE
,只要你想使用或不使用MELD命令文件。
您也可以摆脱MELD和公正的编辑与你最喜欢的文本编辑器文件。
<<<< HEAD
和=====
标记是在合并之前您的本地文件的一个。 ====
和>>>> <branch name>
是远程文件的一个。 合并有通过传递第四个参数激活一个隐藏的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
这也有4个文件:
$LOCAL
在哪里要合并分支中的文件; 当显示给你的合并进程不变
$REMOTE
从正在合并的分支的文件; 当显示给你的合并进程不变
$BASE
的$共同祖先LOCAL和REMOTE $,即。 其中两个分支开始疏导认为文件中的点; 当显示给你的合并进程不变
$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
文件。
科斯明的解决方案工作,但$ 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
随着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
我发现没有显示的默认文件中被保存。 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
出于某种原因,MELD的最新版本不显示添加了冲突标记线(<<<<<<<,=======,>>>>>>>)。 如果你想看到这些行,你应该安装MELD v 1.3.3或以前。
请参阅萨阿德对正确答案的答案。
随着MELD 1.8.1在Ubuntu上我得到了
错号码提供给--diff参数
并添加--output前$合并固定对我来说:
[mergetool "mymeld"]
cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED