Git diff错误地解释了我的更改

时间:2016-12-03 16:08:01

标签: git commit

尝试使用相同结构的差异块时,问题就出现在html / css中。 例: Initial commit

现在让我们将新的参数添加到" someblock"和新课程" someotherblock"。 result

预期结果:

 1  1 .someblock
 2  2    height:100%;
    3+   width:100%;
 3  4 }
    5+.someotherblock{
    6+   height:100%;
    7+}  

有没有什么方法可以让git看不到"逻辑"变化?

3 个答案:

答案 0 :(得分:4)

重要的是要意识到Git没有,并且真的可以没有,向你显示完全你做了什么。 (也许你先添加大括号,然后按顺序添加内容,在这种情况下向你显示你做了什么它必须说"首先添加两个大括号,然后添加介于"之间的内容。)相反,Git只生成一组最小的 1 指令,告诉计算机如何更改"之前的内容&#34 ;到现在应该有什么"。

Git程序员试图让计算机能够理解"这些说明对人类来说也是有道理的,但答案是:

  

有没有办法让git理解"逻辑"变化?

是" no"。

耐心差异(参见Gira's answer)可以帮助解决某些情况,特别是那些Git在仅由开括号或近似括号等组成的行上同步的情况。

Git 2.9增加了一个所谓的"压缩启发式" (描述得相当轻松here)但它需要在更改区域上方留空行。该短语""上面的空白行,表示一个空行位于之上:压缩启发式不相信顶部文件足够(虽然在我看来应该相信这一点)。压缩启发式产生了更大的差异,虽然对我来说,扭曲源只是为了让VCS显示更好的差异是至少令人烦恼。

1 "最小"在尽可能少的意义上"删除X"和"添加Y"说明。 Git没有考虑X和Y的长度,它们通常是线条,尽管Git也有面向字的差异。关系--Git可以说"在这里删除四行并在那里添加四行"然后四处移动,向上或向下移动,使其受到打击,最大限度地降低"由于使用了算法,这就是为什么压缩启发式只试图转移 up

答案 1 :(得分:3)

git diff --histogram正是您正在寻找的。它将以更加人性化的方式显示这样的变化。它解决了git diff显示括号(花括号)“错误”的问题。

请参阅What's the difference between `git diff --patience` and `git diff --histogram`?

答案 2 :(得分:1)

您可以尝试呼叫快速测试:

git diff --patience

或者为所有差异全局设置耐心选项:

git config --global diff.algorithm patience

这将花费更多时间来生成差异,但应该生成更好的输出。