Uma solução alternativa é confirmar as alterações e depois se livrar delas. Isso não tem um benefício imediato a princípio, mas abre a possibilidade de confirmar em partes e criar uma tag git para backup.
Você pode fazer isso na ramificação atual, assim:
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01 # optional
git revert HEAD
git reset HEAD^^
Ou você pode fazê-lo na cabeça desanexada. (supondo que você comece na ramificação BRANCHNAME):
git checkout --detach HEAD
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01 # optional
git checkout BRANCHNAME
No entanto, o que eu costumo fazer é confirmar em partes, depois nomeie algumas ou todas as confirmações como "DISCARD: ...". Em seguida, use o rebase interativo para remover os commits ruins e manter os bons.
git add -p # Add changes in chunks.
git commit -m"DISCARD: Some temporary changes for debugging"
git add -p # Add more stuff.
git commit -m"Docblock improvements"
git tag archive/local-changes-2015-08-01
git rebase -i (commit id) # rebase on the commit id before the changes.
# Remove the commits that say "DISCARD".
Isso é mais detalhado, mas permite revisar exatamente quais alterações você deseja descartar.
Os atalhos git lolegit lola foram muito úteis com este fluxo de trabalho.
git help resetegit help clean