如何显示一个已暂存的删除文件的差异?

14

这是当前状态:

On branch howard
Your branch is up-to-date with 'origin/howard'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    thing.scala
    (and other changed files)

如果我执行git diff --cached,它会显示thing.scala的内容以及其他差异。

但是我只想查看已删除文件的内容。在 git 中如何实现?

以下尝试不起作用:

git show HEAD~1 thing.scala
git diff --cached thing.scala
1个回答

25

你的第一个方法几乎是正确的,只是有两个小问题。

首先,由于你还没有提交,所以最后一个仍然有thing.scala文件的版本是HEAD。而HEAD~1是它之前的版本。

其次,显示特定提交中的文件的语法是git show <commit>:<file>

所以正确的命令是:

git show HEAD:thing.scala

文档中提到了gitrevisions中的语法:

<rev>:<path>, 例如 HEAD:README, :README, master:./README

路径后面跟着的冒号指定了树状对象中给定路径处的blob或tree。冒号前面的部分指定了树状对象的名称。冒号后面的:path(冒号前面部分为空)是下面描述的语法的特殊情况:记录在索引中给定路径处的内容。以./../开头的路径是相对于当前工作目录的。给定的路径将被转换为相对于工作树根目录的路径。这在从与工作树具有相同树结构的提交或树中引用blob或tree时非常有用。

关于git diff --cached:只有当文件存在时,后面的参数才会被解释为文件名。由于您已删除了该文件,这不适用。您可以使用--来强制将参数解释为文件名。
git diff --cached -- thing.scala

8
在回答开头引用错误的语法会让人更难快速获得所需信息,建议删除或将正确的命令放在前面。感谢您提供高质量的答案! - Grant Humphries
@GrantHumphries 作者的账户已被删除,因此改进问题取决于我们其余人。我刚刚进行了一些小修改,我认为这样更清晰明了。你能告诉我你的想法吗? - Fabio says Reinstate Monica
我认为很多人会陷入困境,疑惑,再次阅读,理解并做正确的事情(就像我刚刚做的那样)。我认为这是一个很好的教训 :-) - Benoit Duffez
我刚刚彻底删除了错误的命令,反正它在问题中可以找到。 - undefined

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