【问题标题】:Is there a way to remove "pointless" commits from git history?有没有办法从 git 历史记录中删除“无意义”的提交?
【发布时间】:2016-05-09 12:39:35
【问题描述】:

假设我有这样的 git 历史记录:

A-B-C-D-E-F-G

B 添加了 60k 个文件。

F 删除了这些相同的文件。

任何遍历 git 历史的操作,例如 git log,现在如果必须越过 F(或 B),就会花费大量时间。

有没有办法有效地从历史中删除 B 和 F,因为它们只是相互抵消?

更重要的是:有没有一种简单的方法可以做到这一点,然后确保使用 repo 的其他开发人员也是最新的? (请记住,开发人员在他们的机器上也有功能分支。)我怀疑所有解决方案最终都会导致A-C'-D'-E'-G'...

我的直觉告诉我最好的办法是从 A 创建一个分支,从 C 到 E 挑选 C,然后从 G 创建一个新分支,并将其合并到第一个分支。什么的。

【问题讨论】:

    标签: git version-control collaboration


    【解决方案1】:

    只需执行 git rebase -i A 并删除 B 和 F 的行。
    但是正如您所说(或意思是),这将重写已发布的历史记录,因此您所有的开发人员都需要根据被操纵的分支重新设置所有分支的基础,如git rebase 的手册页中“如何从上游恢复”部分中所述变基”。

    【讨论】:

    • 参考“从上游变基恢复”:有问题的分支是master。我读对了吗,如果我进行交互式 rebase 以摆脱违规提交,我将不得不强制推送到 Github 以覆盖 master,然后要求我的同事对他们当前拥有的每个主题分支进行 rebase?跨度>
    • 没错。这就是改写已发表历史的“成本”。这也是为什么您通常只为本地分支使用合并推送的更改和变基。
    猜你喜欢
    • 2015-07-24
    • 2014-11-20
    • 2012-04-04
    • 1970-01-01
    • 2016-03-13
    • 2013-08-03
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多