git merge - 使用不同的指针合并两个分支

时间:2017-08-06 23:49:10

标签: git merge

我正试图在git中获得合并功能的句柄。我做了一个简单的例子来玩和测试,但我无法达到预期的效果。我从以下非常简单的文件开始

# calc.py
def add():
    pass

def substract():
    pass

然后我git initgit add .git commit -a -m "Initial commit"。这是我的主人。我将其分支以创建两个分支multiplydivide。我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标志,但是在更改主设备后,我无法成功地自动合并文件。

1 个答案:

答案 0 :(得分:2)

您遇到需要人为干预的Git合并冲突。

也就是说,Git遇到了一个可以理解的无法自动合并的场景。它是否保留了两组变化?如果没有,是否保留dividemultiply的更改?如果要保留这两组更改,Git是否会将divide更改置于multiply更改之上或之下?人为干预是回答这些问题的必要条件。

Git merge strategies无法以尊重两个变更集的方式解决冲突。合并策略可以做的是指定如何处理空格和文件重命名,指示Git合并两个以上的头,和/或确保一方在冲突时总是获胜。合并策略无法以尊重两个冲突的变更集的方式解决冲突。