首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >git修补程序的上下文

git修补程序的上下文
EN

Stack Overflow用户
提问于 2018-04-24 17:25:46
回答 2查看 395关注 0票数 2

如果我键入以下内容

代码语言:javascript
复制
git show abckfirn49dj5ks94nsjy03hsev85esk9c32jt04

abckfirn49dj5ks94nsjy03hsev85esk9c32jt04是合法提交哈希的情况下,git将向我展示如下内容

代码语言:javascript
复制
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用来生成修补程序的两个文件。我有理由相信,其中一个是特定哈希的文件,但另一个是

  1. 当前头部的文件?
  2. 紧接当前分支提交哈希之前的文件?
  3. 还有别的吗?
EN

回答 2

Stack Overflow用户

发布于 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

票数 3
EN

Stack Overflow用户

发布于 2018-04-24 18:53:16

第一个文件是提交之前的PFile (表示项目文件夹中当前文件的变量术语)。第二个文件是应用提交后的PFile。

当前头部的文件?

代码语言:javascript
复制
git log  <hash>...HEAD --stat <file>

这三个点很重要,举个例子:

代码语言:javascript
复制
git log  1c9fd7cb16df91a03dc43cea98ff05730ba51b5c...HEAD --stat gc/base/MemorySubSpace.cpp

如果它不显示任何内容,这意味着该文件是一个Pfile (当前头),否则它将打印一个替换PFile的提交列表。

看看git是如何工作的(相同文件的哈希是相同的),除非实际修改了PFile,否则第二个文件不会在以后的所有提交中被取代。

要验证将<hash>替换为<hash>~1,您将在列表中看到当前提交。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50007594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档