有没有办法从 git 历史记录中删除 "pointless" 提交?
Is there a way to remove "pointless" commits from git history?
假设我有这样的 git 历史记录:
A-B-C-D-E-F-G
B 添加了 60k 个文件。
F 删除了那些相同的文件。
任何遍历 git 历史的操作,例如 git log
,如果必须穿越 F(或 B),现在会花费大量时间。
有没有办法有效地从历史中删除 B 和 F,因为它们只是相互抵消?
更重要的是:有没有一种简单的方法可以做到这一点,然后确保使用该存储库的其他开发人员也是最新的? (请记住,开发人员在他们的机器上也有功能分支。)我怀疑所有解决方案最终都会导致 A-C'-D'-E'-G'
...
我的直觉告诉我最好的方法是从 A 创建一个分支,从 C 到 E 精心挑选,然后从 G 创建一个新分支,并将其合并到第一个分支。或者什么的。
只需执行 git rebase -i A
并删除 B 和 F 的行。
但是正如您所说(或意思),这将重写已发布的历史记录,因此您的所有开发人员都需要根据 git rebase
手册页 [=15= 部分下描述的操作分支重新设置所有分支的基线].
假设我有这样的 git 历史记录:
A-B-C-D-E-F-G
B 添加了 60k 个文件。
F 删除了那些相同的文件。
任何遍历 git 历史的操作,例如 git log
,如果必须穿越 F(或 B),现在会花费大量时间。
有没有办法有效地从历史中删除 B 和 F,因为它们只是相互抵消?
更重要的是:有没有一种简单的方法可以做到这一点,然后确保使用该存储库的其他开发人员也是最新的? (请记住,开发人员在他们的机器上也有功能分支。)我怀疑所有解决方案最终都会导致 A-C'-D'-E'-G'
...
我的直觉告诉我最好的方法是从 A 创建一个分支,从 C 到 E 精心挑选,然后从 G 创建一个新分支,并将其合并到第一个分支。或者什么的。
只需执行 git rebase -i A
并删除 B 和 F 的行。
但是正如您所说(或意思),这将重写已发布的历史记录,因此您的所有开发人员都需要根据 git rebase
手册页 [=15= 部分下描述的操作分支重新设置所有分支的基线].