gpt4 book ai didi

git - 为什么不提交跟踪他们的 child 提交?

转载 作者:太空狗 更新时间:2023-10-29 14:32:06 24 4
gpt4 key购买 nike

如果我们 checkout 一个提交而不是分支,HEAD(指向分支的指针)将指向一个提交而不是分支的名称(将此提交称为 A)。这称为分离的 HEAD 状态。如果我创建了一个新的提交 - 提交 B,那么新的提交将会丢失(好吧,也许不会立即)因为我们无法引用它(实际上,我不明白,因为每个提交都有一个 ID,对吧?我们可以在知道 ID 后引用它,但出于某种原因 Git 会删除此类提交。可能是 Git 无法分辨提交属于哪个分支)。

提交只知道他们的 parent ,但不知道 child 。是否有一个原因?如果提交 A 有对提交 B 的引用,我们就可以忘记分离的 HEAD 问题,对吧?但我想这会导致其他一些问题 - 那些是什么?

最佳答案

Commits know only their parent, but not children. Is there a reason for this?

简而言之

Git 提交不会跟踪它们的子项,因为它们是内容可寻址且不可变的。此设计决策有助于构建更简单、更高效的架构。

更多详情

Linus Torvalds,Git 的设计者,intended it to provide data integrity ;如果快照中某个文件的某个版本损坏,Git 应该能够检测到。

为了实现数据完整性,Git 被设计为 a content-addressable filesystem .特别是,提交在创建时会收到一个基于其内容(使用 SHA-1 algorithm )计算的“唯一”(禁止冲突)标识符。此标识符充当 checksum用于提交,可用于检测数据损坏。

不可变性是一个优势:不可变的东西更容易推理并且可以共享。因此,提交的不变性是一个非常理想的特性。一旦创建,提交就一成不变;它不能以任何方式改变。您最多可以创建一个“类似于”现有提交的新提交 (which is what happens when you run git commit --amend)。

但是,如果像您建议的那样,提交跟踪他们的 child ,则必须更新/替换提交每次他们有一个新的后代,因为他们的旧哈希不会反射(reflect)事实上,他们有了一个全新的后代。这会破坏不变性的好处,并使事情变得更加复杂。

关于git - 为什么不提交跟踪他们的 child 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34763175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com