Git: 子树拆分后从历史中删除不相关的提交

Git: Remove irrelevant commits from history after subtree split

我有回购协议 personal_stuff.git,我曾用它来存储一大堆早期的、可能不太完整的项目。

它们中的一个时不时地起飞,我必须将子文件夹从 personal_stuff/coolnewthing 拆分到它自己的 coolnewthing.git 存储库中。

为此,我使用

git subtree split -P personal_stuff/coolnewthing -b coolnewthing

然后通过以下方式从另一个新的 git 目录中拉出新分支:

git pull ../../../../personal_stuff coolnewthing

效果很好,但我的历史记录中的所有这些提交都与不再存在的文件相关。

如何过滤掉这些并仅保留与我仍然拥有的文件相关的提交?

您可以从原始存储库创建一个新的克隆,并select为这个新的本地存储库创建一个新的根目录

git clone <url-to-personal_stuff.git> coolnewthing
cd coolnewthing
git filter-branch --subdirectory-filter coolnewthing

注意:这个新的本地 repo 的来源仍然是 url-to-personal_stuff.git 所以你需要在推送之前更改来源

git remote set-url origin <url-to-coolnewthing.git>