两个不同文件之间的 git diff
Posted
技术标签:
【中文标题】两个不同文件之间的 git diff【英文标题】:git diff between two different files 【发布时间】:2013-05-16 23:52:05 【问题描述】:在HEAD
(最新提交)中,我有一个名为foo
的文件。在我当前的工作树中,我将其重命名为 bar
,并对其进行了编辑。
我想在HEAD
中git 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的主要内容,如果未能解决你的问题,请参考以下文章