2017-08-06 135 views
1

我試圖在git中獲得合併功能的句柄。我做了一個簡單的例子來玩和測試,但我無法達到預期的效果。我開始用下面的非常簡單的文件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標誌,但是我無法在master更改後自動合併文件。

回答

2

您遇到需要人工干預的Git合併衝突。

也就是說,Git遇到了一個可以理解的不能自動合併的場景。它是否保留了這兩組更改?如果不是,它是否保留從dividemultiply的變化?如果要保持兩套更改,Git是否會將divide更改更改爲低於或低於multiply更改?人爲干預對於解決這些問題是必要的

Git merge strategies無法以尊重兩個變更集的方式解決衝突。合併策略可以做的是指定如何處理空白和文件重命名,指示Git合併兩個以上的負責人,和/或確保一方在衝突情況下總是勝出。合併策略不能以尊重兩個相互衝突的變更集的方式來解決衝突。