【发布时间】:2012-02-16 15:56:52
【问题描述】:
如何强制 git merge 对所有文件或所有不同的文件产生冲突以产生具有完整旧版本和全新版本的冲突,此类文件的示例:
<<<<<<<<<<A
A
B
C
D
OLD
OLD
OLD
E
F
G
...
Z
============
A
B
C
D
NEW
NEW
NEW
EEEEEEE
FFFFF
GGG
...
Z
>>>>>>>>>>B
这个想法是我想手动合并两个文件的全部内容,不管行是否相同或一个分支是从整个前一个继承的,例如:
$ echo ABC > file
$ git add file
$ git commit -m '+) file = ABC'
[master 6e91bce] +) file += ABC
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 file
$ git checkout -b new_branch
Switched to a new branch 'new_branch'
$ echo DEF >> file
$ git add file
$ git commit -m '+) file += DEF'
[new_branch 27e29bf] +) file += DEF
1 files changed, 1 insertions(+), 0 deletions(-)
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff new_branch
Automatic merge went well
$ cat file
ABC
DEF
我了解git 自动将“DEF”添加到“文件”的原因。但我想要一种强制 git “思考”的方法:
- master/file 和 new_branch/file 不同
- 我将与整个 OLD 和全新版本发生冲突,让我的用户手动解决它
我读过其他关于制作“合并驱动程序”的帖子,但我还不清楚如何使用它制作 git。 (脚本很明显,就几行)。
附:对于感兴趣的人:我不使用任何合并工具。我想将TSV spreadsheets 与数据集和结果集合并。在它们不同的所有情况下(即使只在一个分支上进行编辑),我想使用我自己的工具链手动处理它们以处理这些数据集。
【问题讨论】:
-
但是任何一个像样的合并工具都会显示每个修订的内容。为什么合并冲突的格式很重要?在您的示例中,没有要解决的冲突...您能更清楚地说明您要做什么吗?
-
感谢@Hamish 指出读者可能不清楚的地方:)。我想将 TSV 电子表格与数据集和结果集与我自己的工具链合并。所以我不想使用任何合并工具。
-
只需告诉 git 你想使用不同的 diff 驱动程序,而不是普通的内置 diff 工具,无论是 Beyond Compare 3 (BC3) 还是 kdiff3。这些工具可以让您查看完整的文件。这些设置可以添加到配置文件中(参见手册页)
-
请按照上面的例子。设置自定义
mergetool或difftool没有帮助,不会引发冲突 -> 因此不会引发解析。总结一下:git co master; git co -b new_branch ; echo NEWLINE >> file ; git ci -a -m '+'; git co master ; git merge new_branch不会产生任何冲突,即使文件不同。问题是,如何强制 git 引发这样的冲突?
标签: git version-control merge diff git-merge