2017-08-28 80 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的分支,纠正错误,如果有必要
  • 提交(修正)合并
  • 相关问题