如何确定git树中列出的哪些文件是特定提交的一部分?

如何确定git树中列出的哪些文件是特定提交的一部分?,git,git-commit,Git,Git Commit,git中的提交有一个对树的引用,该树引用blob或其他树,并捕获项目的“快照”。 我不清楚的是,如何在特定提交与受提交影响的实际文件之间进行关联。 例如,在我的项目中,我有文件README和notes.txt 如果我添加一个新文件,例如contracts.txt并提交它,我将有新的提交XYZ,如果我添加了git show XYZ,我将只看到列出的文件contracts.txt。 但是如果我做了git cat file-p XYZ我会看到它的关联树是ABC,这样做git cat file-p AB

git中的提交有一个对树的引用,该树引用blob或其他树,并捕获项目的“快照”。
我不清楚的是,如何在特定提交与受提交影响的实际文件之间进行关联。
例如,在我的项目中,我有文件
README
notes.txt

如果我添加一个新文件,例如
contracts.txt
并提交它,我将有新的提交
XYZ
,如果我添加了
git show XYZ
,我将只看到列出的文件
contracts.txt

但是如果我做了
git cat file-p XYZ
我会看到它的关联树是
ABC
,这样做
git cat file-p ABC
会显示:

blob F123 README  
blob A0F8 notes.txt  
blob DA03 contract.txt  
因此,我无法从中看出,我们如何才能从作为树的一部分报告的这3个blob中找出,只有
DA03 contract.txt
被添加为提交
XYZ
的一部分

关联是如何完成的?

简单地说:通过与来自父提交的相同信息进行比较。对于合并,将与所有父级进行比较。只有不来自其中任何一个的blob(因此是新文件或其新版本;在合并的情况下,也包括合并冲突的解决方案)通过
git show

简单地显示:通过与来自父提交的相同信息进行比较。对于合并,将与所有父级进行比较。只有不来自其中任何一个的blob(因此是新文件或其新版本;在合并的情况下,也是合并冲突的解决方案)才会通过
git show
显示

我不清楚的是,特定提交与受提交影响的实际文件之间的关联是如何实现的

Git不进行这种关联,它只是为每次提交存储库的快照。如果父提交中不存在文件,则Diff工具会将这些文件显示为新文件

我不清楚的是,特定提交与受提交影响的实际文件之间的关联是如何实现的


Git不进行这种关联,它只是为每次提交存储库的快照。如果父提交中不存在文件,则差异工具会将其显示为新文件。

因此它会执行类似于父提交树的差异的操作?我想知道为什么这比添加一些标志来指示添加了什么更有效?@Jim,不是。这是一个设计选择,我不知道为什么。据推测,这并没有被认为是一个巨大的性能打击。不过,我可以推测,这是因为树对象可以独立于提交而存在,而仅在它们中,这些信息是没有意义的?我想知道为什么这比添加一些标志来指示添加了什么更有效?@Jim,不是。这是一个设计选择,我不知道为什么。据推测,这并没有被认为是一个巨大的性能打击。不过,我可以推测,这是因为树对象可以独立于提交而存在,仅在它们中,这些信息是没有意义的。我的问题是关于类似于
git show SHA1——仅名称的问题
我的问题是关于类似于
git show SHA1——仅名称的问题