我正试图在git中获得合并功能的句柄。我做了一个简单的例子来玩和测试,但我无法达到预期的效果。我从以下非常简单的文件开始
# calc.py
def add():
pass
def substract():
pass
然后我git init
,git add .
和git commit -a -m "Initial commit"
。这是我的主人。我将其分支以创建两个分支multiply
和divide
。我git checkout divide
并执行一些工作,以便divide
分支中的文件看起来像。
# calc.py
def add():
pass
def substract():
pass
def divide(x, y):
return x / y
然后我:
git checkout master
git merge divide
git branch -d divide
然后在multiply
分支上做一些工作,该分支已从初始提交分支出来,并且没有添加divide
分支更改。不过,我添加了一个乘法函数,以便在我的multiply
分支上,我的文件类似于:
# calc.py
def add():
pass
def substract():
pass
def multiply(x, y):
return x * y
然后我想将所有内容合并到master
中,所以我:
git checkout master
git merge multiply
但结果是:
Auto-merging calc.py
CONFLICT (content): Merge conflict in calc.py
Automatic merge failed; fix conflicts and then commit the result.
以便文件类似于:
# calc.py
def add():
pass
def substract():
pass
<<<<<<< HEAD
def divide(x, y):
return x / y
=======
def mulitply(x, y):
return x * y
>>>>>>> mulitply
根据git merging文档,这是预期的行为。我知道我可以删除添加的注释commit
。
无论如何合并这些例子而不必手动干预?我正在考虑使用--strategy
标志,但是在更改主设备后,我无法成功地自动合并文件。
答案 0 :(得分:2)
您遇到需要人为干预的Git合并冲突。
也就是说,Git遇到了一个可以理解的无法自动合并的场景。它是否保留了两组变化?如果没有,是否保留divide
或multiply
的更改?如果要保留这两组更改,Git是否会将divide
更改置于multiply
更改之上或之下?人为干预是回答这些问题的必要条件。
Git merge strategies无法以尊重两个变更集的方式解决冲突。合并策略可以做的是指定如何处理空格和文件重命名,指示Git合并两个以上的头,和/或确保一方在冲突时总是获胜。合并策略无法以尊重两个冲突的变更集的方式解决冲突。