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

时间:2011-02-17 17:13:12

标签: git git-diff git-status

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

我可以想到两种方法:

  1. 还原由git diff生成的修补程序,并将其应用于工作树中的文件
  2. 使用git checkout-index,指向临时文件并从中读取内容
  3. 有更简单的方法吗?

3 个答案:

答案 0 :(得分:53)

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

git show :file

有关详细信息,请参阅gitrevisions manual

答案 1 :(得分:8)

要从索引中捕获文件,我不确定预先存在的可编写脚本的方式,但您可以使用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(或您想要的任何内容),并且非常灵活。

答案 2 :(得分:3)

有三种方法可以使用git获取差异

git diff graph

以便了解工作目录中的文件与您需要的索引之间的区别:

git diff name_of_file

我已经更详细地写了elsewhere