Esta é uma abordagem simples se você não tiver muitas alterações de código:
1. git stash
2. git stash apply
3. remove the files/code you don't want to commit
4. commit the remaining files/code you do want
Então, se você quiser o código que você removeu (bits que você não confirmou) em um commit separado ou em outro ramo, enquanto ainda estiver nesse ramo, faça:
5. git stash apply
6. git stash
Com a etapa 5, como você já aplicou o stash e confirmou o código desejado na etapa 4, o diff e o não rastreado no stash recém-aplicado são apenas o código que você removeu na etapa 3 antes de confirmar na etapa 4.
Como essa etapa 6 é uma reserva do código que você não deseja confirmar, pois provavelmente não deseja perder essas alterações, certo? Portanto, o novo stash da etapa 6 agora pode ser comprometido com este ou qualquer outro ramo, aplicando o git stash no ramo e confirmação corretos.
Obviamente, isso pressupõe que você execute as etapas em um fluxo, se você esconder em qualquer outro ponto dessas etapas, precisará observar a ref do esconderijo para cada etapa acima (em vez de apenas esconderijo básico e aplicar o esconderijo mais recente).