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 lol
egit lola
foram muito úteis com este fluxo de trabalho.
git help reset
egit help clean