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>
我有回购协议 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>