【问题标题】:Is it possible to rewrite very old git history for develop branch是否可以为开发分支重写非常古老的 git 历史
【发布时间】:2019-08-08 23:14:33
【问题描述】:

我正在使用 git 流。我制定了一些规则来保持 git 历史记录干净,因为我正在从这些提交中生成变更日志。

但是一些旧的提交(直接进行开发)或合并的功能分支不遵循这些规则。是否有一些简单的方法可以在不影响所有当前分支(主、版本标签等)的情况下压缩这些旧提交?

我熟悉功能分支中的变基,但我无法想象如何在开发/主分支中进行。

【问题讨论】:

  • 一般来说,不,没有办法回到历史并重写该历史而不会对依赖于该历史的现存分支产生一些影响。如果您想从逻辑上删除一些旧提交,请考虑使用git revert。往前走,只是在使用 Git 时尽量有更好的礼仪,这样你以后就可以避免这种情况。

标签: git rebase git-flow git-rewrite-history


【解决方案1】:

没有。 Git 是一个简单的区块链,因为每个块(提交)都包含对前一个块 ID 的引用。在 Git 中,块 ID 只是其内容的散列,因此当您更改内容时,即使是一点点,散列也会更改,因此 Id 也会更改。由于父 ID 是块内容的一部分,因此如果不更改所有后续块,则无法更改这些早期块。改变父母意味着你需要改变孩子,这意味着你需要改变孩子的孩子等等。

这是完全可能的,但是对于基于旧提交在功能分支上工作的每个人来说,这都会让人头疼。它还会破坏您的所有标签,这些标签将继续指向原始提交,除非您删除并重新创建它们中的每一个,这可能会破坏旧标签指针的构建等任何人。

基本上,您将不得不忍受一段不符合更现代原则的混乱历史。有点像现实生活。

这个规则的唯一例外是如果你能找到某种方法来破解这些原始提交以生成hash collisions。这会欺骗以下提交,使其认为它们仍然指向原始提交。这并不容易实现,而且几乎可以肯定是不可取的,因为被黑的提交看起来像一团糟,但是Git uses SHA-1 哪个has been cracked,所以从技术上讲可能

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多