Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 在修补文件中高亮显示添加/删除的线,忽略移动_Git_Diff - Fatal编程技术网

Git 在修补文件中高亮显示添加/删除的线,忽略移动

Git 在修补文件中高亮显示添加/删除的线,忽略移动,git,diff,Git,Diff,我正在回顾一个补丁,它移动了很多东西,添加了一些东西,删除了一些东西。我想知道是否有人编写了一个实用程序,用于在通用差异中选择唯一的添加/删除 也就是说,同一行的add和remove应该相互抵消 显然,这并不是一直都有用,但有时它正是我想要的:)这就是我最终使用的 用法示例: git diff-w |/path/to/ignore_moves.py | less-R 忽略_.py 这对我来说更有效,可以获得修改文件的差异(忽略仅移动的文件) git diff-M-C-D 从git diff文档中

我正在回顾一个补丁,它移动了很多东西,添加了一些东西,删除了一些东西。我想知道是否有人编写了一个实用程序,用于在通用差异中选择唯一的添加/删除

也就是说,同一行的add和remove应该相互抵消


显然,这并不是一直都有用,但有时它正是我想要的:)

这就是我最终使用的

用法示例:

git diff-w |/path/to/ignore_moves.py | less-R

忽略_.py
这对我来说更有效,可以获得修改文件的差异(忽略仅移动的文件)

git diff-M-C-D

从git diff文档中:

-M[<n>], --find-renames[=<n>]
       Detect renames. If n is specified, it is a threshold on the similarity index (i.e. amount of addition/deletions compared to the file's size). For example, -M90% means git should consider a delete/add pair to be a rename if more than 90% of the file hasn't changed.

-C[<n>], --find-copies[=<n>]
       Detect copies as well as renames. See also --find-copies-harder. If n is specified, it has the same meaning as for -M<n>.

-D, --irreversible-delete
       Omit the preimage for deletes, i.e. print only the header but not the diff between the preimage and /dev/null. The resulting patch is not meant to be applied with patch nor git apply; this is solely for people who want to just concentrate on reviewing the text after the change. In addition, the output obviously
       lack enough information to apply such a patch in reverse, even manually, hence the name of the option.
-M[],--查找重命名[=]
检测重命名。如果指定了n,则它是相似性索引的阈值(即与文件大小相比的添加/删除量)。例如,-M90%意味着Git应该考虑删除/添加对是重命名的,如果超过90%的文件没有改变。
-C[],--查找副本[=]
检测副本以及重命名。另请参见--更难找到副本。如果指定了n,则其含义与-M相同。
-D、 --不可逆删除
删除时省略前映像,即只打印标题,而不打印前映像与/dev/null之间的差异。生成的修补程序不适用于修补程序或git apply;这只适用于那些只想在修改后集中精力复习课文的人。此外,产量明显下降
缺少足够的信息来反向应用这样的修补程序,即使是手动应用,因此该选项的名称为。
在这里,有Bash

git diff | diff-ignore-moved-lines

无需附加脚本的工作解决方案:

git diff --diff-filter=r origin/master..HEAD

根据
mangitdiff
可以过滤所有类型的内容(A-添加、C-复制、D-删除、M-修改、R-重命名)。注意:小写字母的意思是“排除”。

只是添加和删除,而不是什么?我见过的大多数双向差异工具都将它们的整个世界视为添加或删除或未更改的行。我想将“添加行XYZ”和“删除行XYZ”这对视为相互抵消。我想看到添加的行,但从未删除,反之亦然。如果我有一个文件X,有人添加了第5行,有人删除了第5行,只看文件X,我怎么知道发生了什么?您从哪里获得“添加…”“删除…”信息?您从diff的正常输出中获得添加和删除行,添加为加号,删除为减号。我不是在寻找一个工具,我会使用作为我的正常差异,只是一个补充,以正常的补丁审查过程。有时候,当有人重构代码时,他们会无意中删除一行他们不想删除的代码。如果对语句块进行了重新排列,则很难从标准的diff中选择这些删除。要清楚,这是指在同一个文件中移动行,因此
git diff
的选项(如
-M
-C
)不相关。非常感谢!我开始自己写这篇文章,然后想。。。等等,有些人以前一定感觉到过这种痛苦。我非常喜欢它,所以我决定添加一个选项来获得普通输出(适合存储在文件中或在编辑器中打开带有语法高亮显示的文件,如vim),我让它从pyflakes、pylint和pep8中获得完美的分数。问题是它会删除上下文行。另请参见当前的
git diff--color moved
。这不会回答问题,也不会隐藏在同一文件中移动的行。这可能不会回答最初提出的问题。但它回答了我在找到它时一直在寻找答案的问题。问题是它会删除上下文行。这只会忽略重命名的文件,但仍会显示文件中已移动但未更改的行。
git diff --diff-filter=r origin/master..HEAD