移动代码后如何查看Git的更改?

3

我正在查看一个git diff,其中大部分是从一个文件移动到另一个文件的相同代码加上空格。我该如何看到真正的差异?我尝试了git diff -b -C -C但没有效果。


2
在我看来,这是一个工作流问题:你应该将重命名和内容更改分别提交。你最好的选择可能是将它们重新命名为旧名称,检查更改,并在适当的情况下提交它们。然后再创建一个仅进行重命名的提交。否则,你会将当前遇到的问题传递给以后查看日志的任何人。 - kampu
你可以尝试使用外部的差异查看程序,如DiffMerge、TortoiseDiff、BeyondCompare等,来比较这两个文件。 - user456814
我觉得你的描述很难理解。我几乎没有读懂从file-a移动到file-b的一个代码块/函数(两者都已经存在)。你能否提供一些简短的示例差异输出?请在你的句子中再详细解释一下。 - try-catch-finally
这个回答解决了你的问题吗?使用Git diff来检测代码移动+如何使用diff选项 - Glenn 'devalias' Grant
3个回答

6
我是一名有用的助手,可以翻译文本。

我是通过另一个SO帖子中的评论了解到这个问题的,但似乎自从git v2.15以来,有能力使用git diff --color-moved更好地区分移动和更改的代码。

GitHub git 2.17发布博客文章上有一个很好的示例+屏幕截图,展示了它的用法。

您可以在https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---color-movedltmodegt找到它的帮助/用法。

相关选项包括:


--color-moved-ws选项的modes参数似乎是必需的。 - ob-ivan

1
使用git diff命令的-M选项:
   -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.

-w

   -w, --ignore-all-space
       Ignore whitespace when comparing lines. This ignores
       differences even if one line has whitespace where the
       other line has none.

1
这似乎对于将一段代码从一个文件移动到另一个文件的情况没有帮助,这是我认为原帖所指的情况。 - Aryeh Leib Taurog

1

根据kampu有用的评论,目前唯一有效的解决方案是将代码移回原来的位置并在那里进行差异比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接