【发布时间】:2021-12-14 06:32:11
【问题描述】:
我问这个问题是因为我正在研究Pro Git一书,其中有一章重写历史解释了如何更改最后一次提交$ git commit --amend,更改多个提交消息 $ git rebase -i HEAD~3,使用 $ git filter 删除所有提交中的特定文件或文件夹-branch --tree-filter.
这是我的问题:这本书没有提到在所有提交历史中通过多次检查来完成这项工作的可能性。所以我移动我的 HEAD,逐个提交,然后用 $ git commit --amend 一个一个地更改这个特定的提交。
我知道就花费的时间而言,它真的(真的!)昂贵,但它真的可能吗(即它有效)?
如果是,在哪些情况下这可能有用?
【问题讨论】:
-
请注意,从技术意义上讲,您并没有更改任何提交。相反,您是在进行 新的和应该改进的 提交,然后从使用旧的(而且很糟糕?)切换到新的(和改进的?)提交。新提交的哈希 ID 与旧提交的哈希 ID 不同,如果使用旧的哈希 ID,您可以看到旧提交仍然存在。
-
除了 VonC 与新奇的
git filter-repo的链接之外,旧的(名义上已弃用)git filter-branch也做同样的事情。我们只需使用git rev-list或类似方法来枚举所有要复制的提交的所有原始哈希 ID,然后开始复制。完成后,我们将用于引用旧提交的所有名称切换过来,以便它们引用新改进的提交。
标签: git github gitlab commit git-commit