Una solución alternativa es confirmar los cambios y luego deshacerse de esos cambios. Al principio, esto no tiene un beneficio inmediato, pero abre la posibilidad de comprometerse en fragmentos y crear una etiqueta git para la copia de seguridad.
Puedes hacerlo en la rama actual, así:
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^^
O puede hacerlo con la CABEZA separada. (suponiendo que comience en la rama 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
Sin embargo, lo que suelo hacer es comprometerme en fragmentos, luego nombrar algunos o todos los confirmados como "DESCARTAR: ...". Luego, use rebase interactivo para eliminar los commits malos y conservar los buenos.
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".
Esto es más detallado, pero permite revisar exactamente qué cambios desea descartar.
Los atajos git lol
ygit lola
han sido muy útiles con este flujo de trabajo.
git help reset
ygit help clean