请看下面的例子:如何强制手动审查合并中的所有更改?
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