两个不同文件之间的 git diff

Posted

技术标签:

【中文标题】两个不同文件之间的 git diff【英文标题】:git diff between two different files 【发布时间】:2013-05-16 23:52:05 【问题描述】:

HEAD(最新提交)中,我有一个名为foo 的文件。在我当前的工作树中,我将其重命名为 bar,并对其进行了编辑。

我想在HEADgit diff foo,在我当前的工作树中bar

【问题讨论】:

我认为这个问题(来自标题)可能是关于在两个不一定在 repo 中的文件上使用 git diff。我发现 --no-index 标志是为此而设计的,例如git diff --no-index --word-diff old_file.txt new_file.txt(--word-diff 按单词突出显示变化,而不仅仅是行,这对长文本非常有用)。 【参考方案1】:

明确指定路径:

git diff HEAD:full/path/to/foo full/path/to/bar

查看git-diff docs 中的--find-renames 选项。

信用:twaggs.

【讨论】:

我想提一下,您可以使用git diff <path> <path> 比较任意两个文件,即使它们不在 git 存储库中。 @mitenka 我不认为这是正确的。如果您查看git diff --help,您会发现两个文件支持的唯一模式是git diff [<options>] --no-index [--] <path> <path>git diff a b 只匹配提交模式,不匹配文件。 @Doug 这是您提到的帮助命令中的引用,git-scm.com/docs/git-diff:显示磁盘上两个文件之间的 [...] 更改。 @mitenka 帮助说,除非您使用'--no-index',否则它不会比较文件;您的评论应该是一个单独的答案;这不是真的,它与这个答案无关。 @Doug 谢谢你的意见。这是您参考的帮助中的引用:在由 Git 控制的工作树中运行命令并且至少有一个路径指向工作树之外时,或者在工作树之外运行命令时,您可以省略 --no-index 选项由 Git 控制。【参考方案2】:

我相信使用--no-index 是您正在寻找的:

git diff [<options>] --no-index [--] <path> <path>

如 git 手册中所述:

这种形式是比较文件系统上给定的两个路径。你可以 在工作树中运行命令时省略 --no-index 选项 由 Git 控制,并且至少有一个路径指向 工作树,或者当在外部运行命令工作树时 由 Git 控制。

【讨论】:

【参考方案3】:

如果您使用的是 tortoise git,您可以右键单击文件并通过以下方式 git 比较: 右键单击第一个文件并通过 tortoisegit 子菜单选择“Diff later” 然后在第二个文件上你也可以右键单击它,进入 tortoisegit 子菜单,然后选择“Diff with yourfilenamehere.txt”

【讨论】:

以上是关于两个不同文件之间的 git diff的主要内容,如果未能解决你的问题,请参考以下文章

diff(patch):比较两个文件之间的区别(补丁)

git status 在内部的工作方式与 git diff 在显示未跟踪文件方面有何不同?

Linux文件比较命令的diff命令

gitlog和diff区别

git 对比两个分支差异

git diff 命令6种使用场景