請看下面的例子:如何強制手動審查合併中的所有更改?
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. 功能已完成評論,我想柵間它。此時MASTER和FEATURE已經分歧,快進合併是不可能的。在FEATURE該計算被大量修改,這是正確的分支,但不正確的項目的其餘部分,包括MASTER。 然而,試想,這個問題是未知的,我做了git merge
,合併FEATURE到MASTER(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自動合併引入了一個項目中的錯誤。
你如何處理這類問題?什麼是可能的策略?從這個例子中,我會懇求:所有自動合併操作都需要手動檢查!
有沒有辦法在合併時強制手動檢查所有更改?
如果你不想在主從功能的代碼,你不合並。當你想要從該分支發出的所有更改(「正確爲該分支但不適用於...」沒有任何意義)時,合併分支。我看到這裏發生的事情沒有問題。 – crashmstr
如果你不理解它,任何東西都是危險的。花時間學習Git如何在內部工作;它非常有用(比其他大多數工具更有用),而且非常簡單。 – Chris
該錯誤並未由Git的自動合併引入。該錯誤是由決定合併代碼的人介紹的,該代碼「對該分支是正確的,但對於項目的其餘部分是不正確的」。 – jwodder