git - 有没有办法通过保留现有的提交哈希来执行 git rebase?

标签 git rebase

想象一个场景,其中一个项目有一个您 100% 满意的现有 git 树。现在您发现了一些早于迁移到 git 的古老源代码,并希望将其作为 git 历史的一部分。

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

在这种特定情况下,似乎没有必要,除了第一个提交的父项之外,我没有更改任何内容。有办法做到这一点吗?

最佳答案

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

因此,通过更改提交的父级,您正在更改其内容并因此使其先前的 ID 无效。 Git 将不得不重新计算它的散列,以便将提交整合到历史中。否则它会拒绝该提交,因为该提交已损坏,并使您的存储库处于损坏状态。

任何提交 ID 都与其内容的哈希匹配,并且对于任何直接或间接父级都是如此,这是 Git 完整性的核心部分。你无法避免这一点。

所以不,你不能在不影响提交哈希的情况下做你想做的事。您可以做的只是添加另一个与您当前的分支没有任何关系的完全不相关的分支。这样你就不会影响你现有的提交,但你也有办法将旧历史集成到存储库中,这样它就会存储在里面——不是集成,但至少它在那里。

关于git - 有没有办法通过保留现有的提交哈希来执行 git rebase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45781718/

相关文章:

git 子模块在 git status 中显示为文件

git commit 找不到在 cron 作业中运行的(全局)配置

Git merge 仅在 pom.xml 中的版本标记上发生冲突

git - git rebase --onto 分支后的 ~ 是什么意思?

git - 当 Git rebase --continue 真的被空提交阻塞时如何继续

mercurial - 用 Mercurial/Hg 重写非线性历史?

git - 我可以在不修改工作副本的情况下对 Git 分支进行 rebase 吗?

git - 在 TFS/Git 2018 中创建 pull 请求时不需要的默认审阅者

git - git add 的文件模式是否有否定语法?

git - 在单个沿袭中 rebase 多个分支的最简单方法