有没有办法在保持现有提交哈希值的情况下执行git rebase?

时间:2017-08-20 11:36:38

标签: git rebase

想象一下,一个项目有一个你100%满意的现有git树的场景。现在你发现一些古老的源代码在迁移到git之前,并希望将它作为git历史的一部分。

有很多方法可以实现这一点,但据我所知,它总是以一个新的git树结束,即所有现有提交都有不同的ID。

在这个特定的情况下,它似乎没有必要,我不会改变任何东西,除了第一个提交的父级。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:8)

不,这根本不可能。提交的id是其组合内容的哈希值。这不仅包括整个树和文件内容,还包括提交消息,作者信息,对其父级的引用。

因此,通过更改提交的父级,您将更改其内容,从而使其先前的ID无效。 Git将不得不重新计算其哈希值,以便将提交集成到历史记录中。否则它将拒绝该提交被破坏并使您的存储库处于损坏状态。

事实上任何提交id都与其内容的哈希匹配,并且对于任何直接或间接父项都是如此,这是Git完整性的核心部分。你无法避免这种情况。

所以不,你不能在不影响提交哈希的情况下做你想做的事。您可能做的只是添加另一个与您当前分支无关的完全不相关的分支。这样你就不会影响你现有的提交,但是你也可以将旧的历史记录集成到存储库中,这样它就会存储在内部 - 而不是集成在一起,但至少它就在那里。

答案 1 :(得分:0)

是,如果要保存现有的提交散列,请执行以下操作:在重新建立当前分支的基础之前,只需创建一个new_branch。这样,当您结帐到new_branch时,将看到所有历史记录。

答案 2 :(得分:-1)

我同意这几乎是不可能的,但这在技术上是可行的。

你应该在旧的之后创建一个提交,这样在rebase之后,你的新提交最终会得到相同的哈希

当然这很难做到并且不能保证存在另一个哈希,不同于满足这个条件的当前父级