请看以下示例:
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;
}
正如您所看到的: FEATURE 分支中添加的行$a += 1243028;
(对于该分支正确但对项目的其余部分不正确)已合并到 MASTER中
这意味着,从现在开始,GITs自动合并引入了项目中的一个错误。
你如何处理这类问题?有什么可能的策略?从这个例子我恳求:所有自动合并操作都需要手动审查!
在进行合并时,是否有办法强制手动审核所有更改?
答案 0 :(得分:1)
在做了进一步的研究之后,我想目前这个问题的最佳解决方案如下:
(* HEAD 是对最新 MASTER 提交的引用)
git merge --no-commit feature
执行合并但不提交,因此可以审核更改。现在用工作目录, HEAD 和 FEATURE 进行三通差异会很不错。但目前GIT不可能做到这一点是不可能的。所以:
git difftool HEAD
将工作目录与 MASTER 分支的最后一次提交进行比较,必要时更正错误git difftool FEATURE
将工作目录与 FEATURE 分支的最后一次提交进行比较,必要时更正错误答案 1 :(得分:0)
研究为git创建自定义合并驱动程序。以下是一个示例:https://stackoverflow.com/a/5091756/346912
基本上,创建一个始终无法合并的自定义合并脚本,然后告诉git将该脚本用于所有文件,或仅用于特定的文件集。然后合并将始终失败,您可以手动合并所有内容。