我已经创建了一个git存储库并添加了一个文本文件.这是100%用于学习目的.
我在文本文件中添加了"1"并将其提交给master.
从master创建一个新分支并附加"2".
最后,从master创建了一个分支并附加了"3".
您能解释一下这个或任何其他场景中可能发生的冲突吗?
假设我有一个包含此内容的文件master:
Line 1
Line 2
Line 3
Line 4
Run Code Online (Sandbox Code Playgroud)
现在说我创建并签出一个名为的新分支test.在这个分支中,我将文件更改为:
Line 1
Line 2
Line 3 Modified
Line 4
Run Code Online (Sandbox Code Playgroud)
我提交了这个并切换回来master.在master中我将文件更改为:
Line 1
Line 2
Line 3
Line 4 Modified
Run Code Online (Sandbox Code Playgroud)
我承诺 现在,如果我合并分支test到master,我遇到冲突.
为什么不能使用共同的祖先git自动解决这个问题?如果我告诉git使用BeyondCompare作为difftool编辑冲突,BeyondCompare甚至不会告诉用户自动解决这个问题,因为这不是真正的冲突.有没有办法让git自动解决这些问题?我已经尝试过recursive并resolve合并策略,但都没有.
这是我们公司的一个问题,因为有些文件中有多个开发人员在近距离内更换线路,这会导致许多不必要的冲突.
这是一个多年来被问过很多次的问题。我找到了很多答案,尤其是这个:
Git - 如何在所选文件上强制合并冲突和手动合并(@Dan Moulding)
此页面包含如何设置始终返回失败的合并驱动程序的详细指南,从而使手动合并成为可能。我试图为 Windows 调整该解决方案:
我将以下内容添加到我的%homepath%\.gitconfig:
[merge "verify"]
name = merge and verify driver
driver = %homepath%\\merge-and-verify-driver.bat %A %O %B
我把驱动改成了
cmd /K "echo Working > merge.log & git merge-file %1% %2% %3% & exit 1"
(echo Working > merge.log添加来检查驱动程序是否被调用)。
并且,在 repo 的根目录下,创建了一个.gitattributes包含以下行的文件:
*.txt merge=verify
不幸的是,它不起作用。我试图合并一个文件feature.txt,唉,合并成功完成。似乎根本没有调用驱动程序,因为没有创建 merge.log 文件。
我做错了什么吗?任何强制手动合并问题的解决方案都是最受欢迎的。
鉴于我目前的分支是分支A.
分支A包含:
line 1 -- "i love you Foo"
Run Code Online (Sandbox Code Playgroud)
分支B包含:
line 1 -- "i love you Bar"
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
git merge Branch B
Run Code Online (Sandbox Code Playgroud)
我会得到什么?