有没有办法在保持现有提交哈希的情况下进行 git 变基?
Is there a way to do git rebase with keeping the existing commit hashes?
想象一个场景,其中一个项目有一个现有的 git 树,您对它 100% 满意。现在您发现了一些早于迁移到 git 的古老源代码,并想让它成为 git 历史的一部分。
有很多方法可以实现这一点,但据我所知,它总是以新的 git 树结束,即所有现有提交都有不同的 ID。
在这种特定情况下,似乎没有必要,除了第一个提交的父项之外,我没有更改任何内容。有办法吗?
不,这根本不可能。提交的 id 是其组合内容的哈希值。这不仅包括整个树和文件内容,还包括提交消息、作者信息、和对其父项的引用。
因此,通过更改提交的父项,您正在更改其内容,并因此使其先前的 ID 无效。 Git 将不得不重新计算其哈希值以便将提交整合到历史记录中。否则它会拒绝该提交,因为该提交已损坏,并使您的存储库处于损坏状态。
任何提交 ID 都与其内容的哈希值相匹配,并且对于任何直接或间接父级都是如此,这是 Git 完整性的核心部分。你无法避免这一点。
所以不,你不能在不影响提交哈希的情况下做你想做的事。您可以做的只是添加另一个与您当前的分支没有任何关系的完全不相关的分支。这样你就不会影响你现有的提交,但你也有办法将旧历史集成到存储库中,这样它就会存储在里面——不是集成但至少它在那里。
我同意这几乎是不可能的,但在技术上是可行的。
您应该在旧提交之后创建一个提交,以便在变基之后,您的新提交以相同的散列结束
当然这很难做到,并且不能保证存在另一个散列,与满足此条件的当前父级不同
是的,如果你想保存现有的提交哈希:只需在你变基当前分支之前创建一个new_branch。这样当您结帐到 new_branch 时,所有历史记录都会被看到。
想象一个场景,其中一个项目有一个现有的 git 树,您对它 100% 满意。现在您发现了一些早于迁移到 git 的古老源代码,并想让它成为 git 历史的一部分。
有很多方法可以实现这一点,但据我所知,它总是以新的 git 树结束,即所有现有提交都有不同的 ID。
在这种特定情况下,似乎没有必要,除了第一个提交的父项之外,我没有更改任何内容。有办法吗?
不,这根本不可能。提交的 id 是其组合内容的哈希值。这不仅包括整个树和文件内容,还包括提交消息、作者信息、和对其父项的引用。
因此,通过更改提交的父项,您正在更改其内容,并因此使其先前的 ID 无效。 Git 将不得不重新计算其哈希值以便将提交整合到历史记录中。否则它会拒绝该提交,因为该提交已损坏,并使您的存储库处于损坏状态。
任何提交 ID 都与其内容的哈希值相匹配,并且对于任何直接或间接父级都是如此,这是 Git 完整性的核心部分。你无法避免这一点。
所以不,你不能在不影响提交哈希的情况下做你想做的事。您可以做的只是添加另一个与您当前的分支没有任何关系的完全不相关的分支。这样你就不会影响你现有的提交,但你也有办法将旧历史集成到存储库中,这样它就会存储在里面——不是集成但至少它在那里。
我同意这几乎是不可能的,但在技术上是可行的。
您应该在旧提交之后创建一个提交,以便在变基之后,您的新提交以相同的散列结束
当然这很难做到,并且不能保证存在另一个散列,与满足此条件的当前父级不同
是的,如果你想保存现有的提交哈希:只需在你变基当前分支之前创建一个new_branch。这样当您结帐到 new_branch 时,所有历史记录都会被看到。