filter-branch 不会删除孤立分支
filter-branch wont delete orphan branches
我有一个大而旧的项目,我想把一个文件夹变成一个子模块
我用过
git filter-branch --subdirectory-filter <folder name> -- --all
将其与项目的其余部分分开,并保留与其相关的所有历史记录
它做了我想要的,但有一些与文件夹无关的提交
经过一番研究后,我发现所有不相关的提交都来自两个孤立分支
我做了更多研究,发现孤儿分支的提交包含在
git rev-list --all
问题是,如果孤儿分支与我指定的文件夹没有任何关系,为什么不删除它们?
如果我不能在同一命令中删除它们的历史记录,我该怎么做才能删除所有孤立分支的历史记录?
编辑:
我已经尝试使用 --prune-empty
选项无济于事
您可以尝试添加 --prune-empty
选项,它将删除保留子目录不变的提交。
解决方案是运行以下命令:
git push origin : <orphan_branch_name> --force
或者,或者 - 在 运行ning `filter-branch 命令之前,运行 这个:
git remote in `git branch -r | grep -v "<orpan_branch_names>"; do git checkout --track $remote; done
其中 <orpan_branch_names>
是用 |
(or)
分隔的孤立分支名称
我有一个大而旧的项目,我想把一个文件夹变成一个子模块
我用过
git filter-branch --subdirectory-filter <folder name> -- --all
将其与项目的其余部分分开,并保留与其相关的所有历史记录
它做了我想要的,但有一些与文件夹无关的提交
经过一番研究后,我发现所有不相关的提交都来自两个孤立分支
我做了更多研究,发现孤儿分支的提交包含在
git rev-list --all
问题是,如果孤儿分支与我指定的文件夹没有任何关系,为什么不删除它们?
如果我不能在同一命令中删除它们的历史记录,我该怎么做才能删除所有孤立分支的历史记录?
编辑:
我已经尝试使用 --prune-empty
选项无济于事
您可以尝试添加 --prune-empty
选项,它将删除保留子目录不变的提交。
解决方案是运行以下命令:
git push origin : <orphan_branch_name> --force
或者,或者 - 在 运行ning `filter-branch 命令之前,运行 这个:
git remote in `git branch -r | grep -v "<orpan_branch_names>"; do git checkout --track $remote; done
其中 <orpan_branch_names>
是用 |
(or)