pip install git-filter-repo $filesToDelete = @("some.txt", "other.txt") $excludeFolders = @("template") Get-ChildItem -Path . -Recurse -File | Where-Object { $filesToDelete.Contains($_.Name) -and -not $excludeFolders.Contains($_.Directory.Name) } | % { git filter-repo --path $_.FullName --invert-paths --Force } # Also just git filter-repo --path-glob '**/some.txt' --path-glob '**/other.txt' --invert-paths --force git reflog expire --expire=now --all && git gc --prune=now --aggressive git push origin --force --all git push origin --force --tags # May require adding origin again: # git remote add "origin" git@github.com:User/UserRepo.git