将很久以前合并的PR的git历史记录从commit方法更改为squash方法

问题描述 投票:0回答:1

社区您好!

如图所示,有一个提交 (cm1),其中包含在本地分支中提交的许多二进制文件。 此提交已在 cm2 处恢复,并在最终提交 (cm4) 处创建了 Pull 请求,并在 6 个月前与 commit 方法 合并。这意味着主分支将包含该开发分支的历史记录。

这样做的结果是由于这次提交而无法克隆存储库,所以我必须重写历史记录。

我已经尝试过上面的命令,但不知何故它做出了更改,例如删除或保留下一个 PR。这就像搞乱提交。

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch make/*' <hash_cm1>..HEAD

我想到的另一个想法,在这里我希望你的贡献,是我是否可以更改此合并的历史记录,并从 merge commit 方法将其转换为 merge squash 方法。这意味着压缩 cm1、cm2、cm3、cm4,以消除 cm1 中二进制文件的存在,并为此 PR 进行一次提交。

提前谢谢您!

git git-merge git-squash binaries git-history-rewrite
1个回答
1
投票

我找到了解决问题的方法。

最简单快捷的解决方案是使用工具bfg-repo-cleaner

java -jar bfg.jar --delete-files BIG_FILE  my-repo.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push --force

请先使用

git clone --mirror

进行存储库备份

目前我发现没有腐败并且工作得很好。

神奇的工具!

[编辑] 似乎只有 master 发生了变化,其余分支包含二进制文件......

© www.soinside.com 2019 - 2024. All rights reserved.