如何对比git已暂存文件与其他分支中相同文件的差异

3
如果我理解正确,如果我执行...
git diff master devel ./my_file

我获取两个分支HEAD之间的差异。 不过,如果我对master进行更改并暂存它们,我认为我可以通过以下方式获取未暂存文件和其他分支中相应文件之间的差异:

$ git diff --cached master devel ./my_file

但我收到以下错误信息:
usage: git diff [<options>] [<commit> [<commit>]] [--] [<path>...]

那么,在文件中获取暂存更改和另一个分支中相应文件之间的差异的正确方法是什么?

你可以提交暂存的文件,然后进行比较吗? - evolutionxbox
是的,但在提交之前检查文件会更好。 - loris
为什么要费心呢?提交可以被丢弃(就像存储一样)。如果您愿意,您可以将提交视为临时的。 - evolutionxbox
仅为了检查阶段而进行提交,这样做就失去了拥有阶段的意义。 - Tim Biegeleisen
@TimBiegeleisen 我把 stage 误读成了 stash... - evolutionxbox
1个回答

6

请尝试以下语法:

git diff --cached devel -- my_file.ext

这个命令应该将my_file.extdevel分支的HEAD版本进行比较,与当前的master分支上的版本进行比较(假设您在master分支上运行此命令)。

虽然这个命令中有很多内容,但请注意,--cached并不是指devel,因为devel是一个提交,其中阶段的概念不适用。相反,--cached指的是文件my_file.ext,该文件位于--分隔符后面。

这个命令对应于手册中的以下模式:

git diff [--options] --cached [<commit>] [--] [<path>…​]

这里的devel是提交的版本,my_file.ext是文件路径。


抱歉在原问题中写成了“未暂存”而不是“已暂存”。这个命令可以工作,但它是从手册的哪个部分来的呢?手册中的概要和描述似乎并没有涵盖分支。 - loris
@loris,请检查我的更新答案,它与Git手册相匹配。 - Tim Biegeleisen
你是对的,虽然我觉得有点混淆,因为我的理解是分支是一个指向提交的引用,而不是实际的提交。 - loris
就技术文档而言,Git的手册有点松散。至于语法,分支名称可以用来表示该分支的HEAD提交,例如在rebase中。 - Tim Biegeleisen
为了完整起见,我包含了@Tim对我的原始问题的答案,该问题是关于获取相对于另一个分支的未暂存文件的差异而不是已暂存文件的差异。他的解决方案是git diff devel:my_file -- my_file。我在手册中没有发现带有冒号的语法,但在这里有描述:https://git-scm.com/book/en/v2/Git-Internals-The-Refspec - loris

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