如果我键入以下内容
git show abckfirn49dj5ks94nsjy03hsev85esk9c32jt04在abckfirn49dj5ks94nsjy03hsev85esk9c32jt04是合法提交哈希的情况下,git将向我展示如下内容
commit abckfirn49dj5ks94nsjy03hsev85esk9c32jt04
Author: Bob Jenkins <bjenkins@example.com>
Date: Mon Apr 23 14:38:51 2018 -0700
Commit message
diff --git a/somefile.txt b/agent/somefile.txt
index 54fc0544b..b7ce493a5 100644
--- a/somefile.txt
+++ b/somefile.txt
@@ -137,7 +137,6 @@ end:
context
context
+ an added line
context
context
- a deleted line也就是说--它向我展示提交哈希、提交作者、提交日期、提交消息、和unix修补程序。
我将unix修补程序格式理解为对两个文件之间差异的描述,这种描述方式允许unix patch命令重新应用这些差异。
当我运行git show [commit hash]时-- git用来生成修补程序的两个文件。我有理由相信,其中一个是特定哈希的文件,但另一个是
发布于 2018-04-24 17:37:42
每个提交对象引用一棵树(最终告诉它文件的哪个版本对应于该提交)和指向前一个提交对象的指针。
散列abckfirn49dj5ks94nsjy03hsev85esk9c32jt04对应于其中一个提交对象,该对象的头中将有一个指向其前身的parent字段。
如果您对这一切的工作方式感兴趣,我推荐以下页面:
https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
特别是这张图表:
https://git-scm.com/book/en/v2/images/data-model-3.png
(故意不热链接)
编辑:也是git社区书:model.html
发布于 2018-04-24 18:53:16
第一个文件是提交之前的PFile (表示项目文件夹中当前文件的变量术语)。第二个文件是应用提交后的PFile。
当前头部的文件?
git log <hash>...HEAD --stat <file>这三个点很重要,举个例子:
git log 1c9fd7cb16df91a03dc43cea98ff05730ba51b5c...HEAD --stat gc/base/MemorySubSpace.cpp如果它不显示任何内容,这意味着该文件是一个Pfile (当前头),否则它将打印一个替换PFile的提交列表。
看看git是如何工作的(相同文件的哈希是相同的),除非实际修改了PFile,否则第二个文件不会在以后的所有提交中被取代。
要验证将<hash>替换为<hash>~1,您将在列表中看到当前提交。
https://stackoverflow.com/questions/50007594
复制相似问题