如何在' index'中显示文件内容和当前分支机构的提示'?

时间:2016-05-27 02:39:58

标签: git

我是Git的新手。基本上,当我在分支机构工作时,我需要考虑3个地方。

如果我能够了解下面的内容,很多概念都会变得清晰。

  1. 索引中的文件内容(不仅仅是文件条目)。
  2. 文件内容位于当前分支的顶端。
  3. 在我的工作树中记录内容
  4. 我可以在文件系统中轻松检查3。

    如何检查1和2?

    或至少在1,2和3之间差异?

2 个答案:

答案 0 :(得分:1)

在它们之间检查差异更容易:

git diff显示1和3的差异。

git diff --cached显示差异为2和1。

对于2和3的差异,

git diff HEAD

不是一个完整的解决方案,但cat 2应该可以使用一些shell技巧(实现git find-object-in-head然后git cat-file)。

答案 1 :(得分:1)

  

如果我能够了解下面的内容,很多概念都会变得清晰。

     
      
  1. 索引中的文件内容(不仅仅是文件条目)。
  2.   

索引包含任何文件内容。

您可以使用git ls-files查看索引中的内容;使用--stage获取最完整的信息。请注意,索引中的内容实际上只是哈希值,加上阶段号,模式以及ls-files省略的有趣内容(内部时间戳和其他缓存信息):

100644 3ccb06a84f29b059df24a6c579d3be262bd33167 0   .gitignore
[snip]

要查看内容,您必须使用哈希,这是Git的内容标识符。使用git cat-file -p,你可以漂亮地打印任何Git对象,包括" blob"保存文件的对象'数据:

$ git cat-file -p 3ccb06a84f29b059df24a6c579d3be262bd33167
# Object files
*.o
[snip]
  

当前分支顶端的文件内容。

当前提交称为HEAD

正如今天所实施的那样,HEAD是一个实际文件,所以:

$ cat .git/HEAD
ref: refs/heads/master

在这种情况下,HEAD告诉我们(和Git)我们是"在分支上#34;正如git status所说的那样。该分支的名称为master。我们知道这是因为HEAD是一个符号引用 - 它的内容以文字字符串ref:开头,包括空格 - 其余内容是refs/heads/master,它是引用的名称在refs/heads/命名空间中,这是分支名称所在的位置。

通常,查明您是否在分支机构的方法是使用git symbolic-ref HEAD。如果你不在分支机构,你必须在特殊的匿名分支上,Git称之为"分离的HEAD"。

同时,分支master的提示提交的ID存储在一个或多个文件中,可以使用git rev-parse命令找到,该命令定位正确文件。 (如果您愿意得到可能错误的答案,可以查看.git/packed-refs.git/refs/heads/master,这些目前是名为master的分支的两个适用文件。但它'最好运行git rev-parse。)

$ git rev-parse master
708de7734417df0f6ec44e8b06d8ce566f08f191

这是提交的ID;再次,git cat-file -p将打印它:

$ git cat-file -p master
tree 624403f4492cd5cbd3c0ab75059ea0229a45d908
[snip]

如果HEAD已分离,则HEAD文件将包含提交的原始ID。例如,如果我从HEAD分离master,则.git/HEAD将包含708de7734417df0f6ec44e8b06d8ce566f08f191

  

我工作树中的文件内容。

这是您使用普通命令行实用程序看到的所有内容,但.git的内容除外,其中包含Git的存储库。例如,在类Unix的shell中,您可以运行ls -R来查看文件名。文件'通过打开和阅读文件获得内容。