如何从git索引获取文件内容?

zaz*_*aza 31 git git-diff git-status

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

我可以想到两种方法:

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

有没有更简单的方法?

gra*_*ity 55

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

git show :file
Run Code Online (Sandbox Code Playgroud)

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

  • @smwikipedia,[有关更多信息,请参阅gitrevisions(7).](http://i.stack.imgur.com/hOUGa.png) (2认同)

Jos*_*Lee 8

要从索引中捕获文件,我不确定预先存在的可编写脚本的方式,但您可以使用ls-files查询索引:

$ git ls-files -s README
100644 67cfeb2016b24df1cb406c18145efd399f6a1792 0   README
$ git cat-file blob 67cfeb2016b24df1cb406c18145efd399f6a1792
# etc.
Run Code Online (Sandbox Code Playgroud)

您可以将命令放在一起,如下所示:

git cat-file blob $(git ls-files -s README | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)

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

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


Abi*_*ern 5

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

git 差异图

所以要查看工作目录中的文件和索引之间的区别,您只需要:

git diff name_of_file
Run Code Online (Sandbox Code Playgroud)

我在别处更详细地写过这个

  • 谢谢,但我对获得差异不感兴趣。我正在寻找整个_文件内容_。有了差异,我可以在进行更改之前推断出文件内容是什么,但我已经在问题中提到了这一点。 (2认同)