git checkout --force <BRANCH>
funciona bem se você quiser descartar todas as alterações locais não confirmadas, mas não removerá arquivos não rastreados. No entanto, uma vez que o git está ciente de um arquivo na área de teste, o mesmo comando o removerá. Preceda o acima com um git add .
para remover tudo que não tiver versão.