Revertir cambios por etapas, mantener cambios sin escenario

Tengo algunos cambios escalonados y otros no procesados ​​en git, así como algunos files sin seguimiento. Me gustaría mantener los cambios no supervisados ​​y los files sin seguimiento, y descartar los cambios por etapas.

¿Cuál es la forma más fácil de hacer esto en la línea de command?

Tengo algunos cambios escalonados y otros no procesados ​​en git, así como algunos files sin seguimiento. Me gustaría mantener los cambios sin compromiso y los files sin seguimiento, y descartar los cambios comprometidos.

Como ha aclarado en su comentario, quiere decir "… y descartar los cambios realizados" (no los cambios comprometidos ). Normalmente, git reset para deshacer el git add . Pero en su caso, quiere mantener sus cambios no registrados, así que:

 git commit # move staged to a commit, does not touch unstaged changes/unadded files git checkout HEAD^ # checkout the previously committed version while keeping unstaged changes/unadded files git branch yourbranchname --force # to grab the branch and move it back as well 
 git reset HEAD^ 

Restaure HEAD a su elemento principal, y ahora los cambios de compromiso se descartan en el índice pero se guardan en el tree de trabajo.

 git checkout -- paths_of_files_whose_changes_are_to_be_discarded_in_the_work_tree 

Descarta los cambios en el tree de trabajo.