|
|
1
2
你说你的
这表明
图表
可以
具有多个根。这在Git提交图中有点不寻常,因为我们通常先签出一些现有的提交,然后进行更改,然后运行
在任何情况下,一旦我们有了这种状态,即有多个根,并且有一个合并提交合并了额外的根,然后在合并上构建了更多的提交,我们就有点陷入了这种情况。合并提交——在您的案例中,
因此,如果要以某种方式摆脱额外的根提交,则合并提交需要具有不同的哈希ID,这意味着每个后续提交都将
而且
需要有不同的哈希ID。此外,如果
做
摆脱你自己
因此,这将导致您必须使用一个过程来避免两个根提交:
一旦您有了这个线性提交链,它不依赖于您想要摆脱的提交,那么您就可以简单地 停止使用 最初的承诺链 做 取决于您要删除的提交。如果你 还有其他人 这样做,就可以删除Git使用的名称 发现 那条旧链条,似乎那条旧链条从未存在过。使用 名称 对于他们来说,最终旧的承诺确实会被删除。(当所有的安全检查计时器都过期时,就会发生这种情况。这些安全检查的存在是为了让你在犯错误时可以找回旧的提交,但很快就会发现错误,通常是30天,这样Git就可以生成尚未连接到提交图中的对象,但是 将 14天内。正常的Git命令最坏也只能在几毫秒内将它们连接起来,因此14天几乎就是数千年。)
以上说明
是可能的
按照您的建议执行(尽管您可能希望构建一个与我描述的略有不同的替换历史)。是否是
好主意
完全是另一个问题。重写历史的主要缺点是,无论您如何使用
将(部分或全部)你的承诺改写成新的历史并没有什么根本错误,你只需要(a)知道怎么做,(b)意识到“每个人都必须改变”的后果。如果没有其他人拥有您要替换的提交,那么这种重写是完全安全的 其他人员 或 其他Git存储库 这将使旧的承诺重新发挥作用。如果每个人 做 让老承诺理解这是如何运作的,并计划合作,这种历史重写是 主要地 安全:只有当有人犯错时才会出错(然后,取决于你自己的谨慎程度和/或偏执,可能只有他们才会犯错!)。当你有天真的用户,他们只是让Git默认 Borg-like action 集成了它遇到的每一项技术,这种重写会造成混乱。 |
|
Harry · 如何在编译时获取克隆的git仓库的标签 1 年前 |
|
Ooker · 如何从blob中删除秘密? 1 年前 |
|
|
hasdrubal · git日志图智能分支过滤器 1 年前 |
|
|
J. Doe · 为什么git中没有跟踪git文件? 1 年前 |