【问题标题】:Git merge - manual merge - forcing conflic having WHOLE old and new file versionGit合并 - 手动合并 - 强制冲突具有整个旧文件和新文件版本
【发布时间】: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。这些工具可以让您查看完整的文件。这些设置可以添加到配置文件中(参见手册页)
  • 请按照上面的例子。设置自定义 mergetooldifftool 没有帮助,不会引发冲突 -> 因此不会引发解析。总结一下:git co master; git co -b new_branch ; echo NEWLINE &gt;&gt; file ; git ci -a -m '+'; git co master ; git merge new_branch 不会产生任何冲突,即使文件不同。问题是,如何强制 git 引发这样的冲突?

标签: git version-control merge diff git-merge


【解决方案1】:

你仍然需要告诉 Git 这些应该被视为二进制文件,如果有任何差异将导致冲突。现在由您自己使用git show otherbranch:thefilegit show HEAD:thefile 之类的内容来调查这些文件。编辑文件后,添加它并添加git commit

【讨论】:

  • Pro Git: Git Attributes - 根据您的回答。我找到了这个。你有更多相关链接推荐吗?
  • 我用* binary 制作了.gitattributes,现在它将文件识别为二进制文件。它没有帮助。请按照上面的例子。总结一下:git co master; git co -b new_branch ; echo NEWLINE &gt;&gt; file ; git ci -a -m '+'; git co master ; git merge new_branch不会产生任何冲突
  • 双方没有变化。你需要双方都改变才能产生冲突
  • 您是否建议在每个文件的末尾添加一些关于合并大小的垃圾数据,将此垃圾提交到 repo,以强制冲突。然后从所有文件的末尾删除它添加垃圾数据而不提交,由于错误:error: Your local changes to the following files would be overwritten by merge:
  • 即使我在合并端添加垃圾数据,当另一个被更改时 - 它也不起作用。 Git 将其与递归策略合并:Auto-merging file Merge made by the 'recursive' strategy. file | Bin 22 -&gt; 26 bytes
猜你喜欢
  • 2011-07-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
相关资源
最近更新 更多