2017-08-28 30 views
-2

請看下面的例子:如何強制手動審查合併中的所有更改?

git log --all --oneline --graph 

* fc89735 (HEAD -> master) Merge branch 'feature' 
|\ 
| * 034f1de (feature) modify the calculate function 
| * 57aaea2 added another calculation function 
* | 382de62 just add a comment 
|/ 
* 303a4ed initial commit 

這裏是我做過什麼:

1.  初始提交(feature.php)(303a4ed):

<?php 
function calculate($a) { 
    return ($a + 500) * 0.4 + 10; 
} 

2.  我創建了一個分支FEATURE我剛剛添加了另一個功能,一個功能...(57aaea2):

<?php 
function calculate($a) { 
    return ($a + 500) * 0.4 + 10; 
} 

function anotherCaluclation($b) { 
    return ($b - 500) * 0.2 + 5; 
} 

  3.我已經修改的計算功能的計算,以適應FEATURE(034f1de)的要求:

<?php 
function calculate($a) { 
    $a += 1243028; 
    return ($a + 500) * 0.4 + 10; 
} 

function anotherCaluclation($b) { 
    return ($b - 500) * 0.2 + 5; 
} 

  4.在MASTER我添加了一個在計算功能(382de62)

<?php 
//a crazy calculation function calculate($a) { 
    return ($a + 500) * 0.4 + 10; 
} 

5.  功能已完成評論,我想柵間它。此時MASTERFEATURE已經分歧,快進合併是不可能的。在FEATURE該計算被大量修改,這是正確的分支,但不正確的項目的其餘部分,包括MASTER。 然而,試想,這個問題是未知的,我做了git merge,合併FEATUREMASTER(fc89735):

git merge feature 

我得到以下日誌:

Auto-merging feature.php 
Merge made by the 'recursive' strategy. 
feature.php | 5 +++++ 
1 file changed, 5 insertions(+) 

而且這是得到的內容:

<?php 
//a crazy calculation function 
function calculate($a) { 
    $a += 1243028; 
    return ($a + 500) * 0.4 + 10; 
} 

function anotherCaluclation($b) { 
    return ($b - 500) * 0.2 + 5; 
} 

正如你可以看到:T他在FEATURE分支(該分支正確,但不適用於該項目的其餘部分)中添加了行$a += 1243028;合併到MASTER

這意味着,從這一刻起,GITs自動合併引入了一個項目中的錯誤。

你如何處理這類問題?什麼是可能的策略?從這個例子中,我會懇求:所有自動合併操作都需要手動檢查!

有沒有辦法在合併時強制手動檢查所有更改?

+5

如果你不想在主從功能的代碼,你不合並。當你想要從該分支發出的所有更改(「正確爲該分支但不適用於...」沒有任何意義)時,合併分支。我看到這裏發生的事情沒有問題。 – crashmstr

+1

如果你不理解它,任何東西都是危險的。花時間學習Git如何在內部工作;它非常有用(比其他大多數工具更有用),而且非常簡單。 – Chris

+1

該錯誤並未由Git的自動合併引入。該錯誤是由決定合併代碼的人介紹的,該代碼「對該分支是正確的,但對於項目的其餘部分是不正確的」。 – jwodder

回答

0

看看爲git創建一個自定義合併驅動程序。這裏是一個例子:https://stackoverflow.com/a/5091756/346912

基本上,創建一個自定義合併腳本,總是失敗的合併,然後告訴git使用該腳本的所有文件,或只是爲一組特定的文件。然後合併將總是失敗,並且您可以手動合併所有內容。

1

做進一步的研究後,我想在目前這個問題的最佳解決方案如下:

(* HEAD是最新MASTER參考提交)

  1. git merge --no-commit feature做合併,但不要提交,因此可以檢查更改。現在

這將是很好做一個三方-DIFF與工作目錄HEADFEATURE。但目前GIT不可能實現這種功能。所以:

  • git difftool HEAD比較工作目錄與上次提交MASTER分公司,糾正錯誤,如果有必要
  • git difftool FEATURE比較工作目錄與上次提交FEATURE的分支,糾正錯誤,如果有必要
  • 提交(修正)合併
  • 相關問題