34

我不小心在 master 上工作,我不得不开设一个新分支。

我几乎完全恢复了它的原始形式。在一节课上,我得到了以下我无法理解的差异。

index 4a9abb8..7c55879 100755
--- a/includes/site.inc.php
+++ b/includes/site.inc.php
@@ -142,11 +142,11 @@ class site{

        public $tplEngine = 'smarty';

-
+       
     private $_productsByType = array();
     private $logger;
-    protected $locale = 'tr_TR';
-
+    protected $locale = 'tr_TR';  
+    

它说我删除并添加了相同的东西,原则上与原始索引没有区别,我不希望这个文件被视为修改过。

我应该怎么办 ?谢谢。

4

8 回答 8

54

这可能是空白更改。您可以运行git diff -w,这将忽略任何空白更改。

于 2012-07-12T13:30:19.790 回答
11

检查空格。被替换的“空”行中有空格。您也可能不小心将制表符替换为空格,反之亦然。

于 2012-07-12T13:18:29.187 回答
3

除了空格/制表符之外,从不同编辑器(甚至在 Windows 上)和/或不同操作系统输入的行尾也会导致显示重复的差异行;LF (linux/Unix) 与 CRLF (Windows)。

于 2016-12-09T19:09:55.957 回答
1

非空行的第二个版本在分号后有一个空格,空行也有不同数量的空格。

应该有一个选项可以让 git 突出显示这些隐藏的空间,以便差异提供更多信息,但我没有手边的手册。

于 2012-07-12T13:21:55.167 回答
1

检查空格或行尾差异。

于 2012-07-12T13:20:03.430 回答
1

由于命令行输出中有时不显示尾随空格,因此使用

git difftool

在将 vimdiff 指定为您的 difftool via 之后git config --global diff.tool vimdiff可能会有所帮助。

于 2020-01-16T13:30:40.733 回答
0

请注意,如果您使用新选项, git 1.8.4(2013 年 7 月)将不再向您显示只有空行的更改。-B

" git diff" 学习了一种忽略 hunks 的模式,其更改仅包括添加和删除空白行,这与diff -BGNU diff 的 " "(忽略空白行)相同。

请参阅提交 36617af7ed594d1928554356d809bd611c642dd2

补丁的目标是尽可能地引入 GNU diff -B/--ignore-blank-lines。短选项不可用,因为它已用于“ break-rewrites”。

使用此选项时,git diff不会创建仅添加或删除空行的块,但如果它们足够接近“有价值的”更改,仍将显示空行添加/抑制。

以下是对该选项的更详尽描述:

  • 真正的变化很有趣
  • 与有趣的变化足够接近(小于上下文大小)的空行被认为是有趣的(递归定义)
  • 每个有趣的变化都使用“上下文”行
  • 如果两个块之间的间隔小于“inter-hunk-context”,它们将合并为一个。
于 2013-07-07T10:16:41.687 回答
0

有时会发生这种情况,因为 git 使用的默认 diff 算法使用启发式方法来消除昂贵的边缘情况,这可能会导致次优结果。

我遇到了一个与此相同的问题,由于空格、行尾等原因我无法解释。 git diff正在显示一个被删除然后重新添加的特定行,作为显示为 3 行已删除和添加了 2 行,但实际上删除了 2 行并添加了 1 行。其他差异程序显示预期的 2 行已删除和 1 行添加。

发生这种情况的文件有 4736 行 (114 KB),差异总计为 640 次插入和 1340 次删除,有问题的大块位于文件中间。我无法将它简化为一个更小的测试用例,它表现出同样的问题:在任何地方进行最轻微的扰动都会使问题消失。我唯一的结论是我陷入了差异算法启发式的这些边缘案例之一。

除了默认的,Git 还支持多种其他差异算法。通过将算法切换到 、 或 中的任何一个minimalpatiencehistogram的问题在这种情况下就消失了。

另请参阅来自嵌入式 LibXDiff 库的 git 源代码中的此注释

于 2019-10-22T18:40:58.867 回答