尝试使用相同结构的差异块时,问题就出现在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看不到"逻辑"变化?
答案 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
这将花费更多时间来生成差异,但应该生成更好的输出。