42

我有一个文件已经添加到我的本地存储库中。我已经在工作树中对其进行了修改,因此git status向我显示了修改后的文件。在暂存文件之前,我想知道索引中保存的文件内容是什么。

我可以想到两种方法:

  1. 还原由 生成的补丁git diff,并将其应用于工作树中的文件
  2. 使用git checkout-index,指向一个临时文件并从那里读取内容

有没有更简单的方法?

4

3 回答 3

70

使用:前缀访问当前索引中的对象(暂存但尚未提交)。

git show :file

有关更多信息,请参阅gitrevisions 手册

于 2011-03-01T10:45:44.553 回答
9

要将文件从索引中提取出来,我不确定是否有预先存在的脚本方式,但您可以使用它ls-files来查询索引:

$ git ls-files -s README
100644 67cfeb2016b24df1cb406c18145efd399f6a1792 0   README
$ git cat-file blob 67cfeb2016b24df1cb406c18145efd399f6a1792
# etc.

您可以像这样将命令放在一起:

git cat-file blob $(git ls-files -s README | awk '{print $2}')

(虽然我肯定在这里重新发明轮子。)

但是,如果您只想在编辑器中打开原始文件和您的更改,请使用该difftool命令。它将索引版本复制到一个临时文件并为您打开vimdiff(或任何您想要的),它非常灵活。

于 2011-02-17T17:34:55.393 回答
5

使用 git 获取差异的三种方法

git 差异图

因此,要查看工作目录中的文件和您只需要的索引之间的区别是什么:

git diff name_of_file

我在其他地方更详细地写过这个

于 2011-02-17T18:12:58.083 回答