Histórico de filtragem de arquivos na raiz de um diretório

Dado que você tem a seguinte estrutura de diretório em seu repositório:

dir1/
file1

file2

dir2
/
file3

file4

dir3
/
file5

Se você deseja criar um novo repositório contendo apenas arquivo1 e arquivo2 (e o histórico), você pode executar os seguintes comandos:

git filter-branch --prune-empty --subdirectory-filter dir1 master
git update
-ref -d refs/original/refs/heads/master
git filter
-branch --prune-empty --index-filter 'git rm -r --cached --ignore-unmatch dir2' --tag-name-filter cat -- --all

Isso lhe dará um novo histórico de todos os commits que contêm arquivo1 e arquivo2