¿Cómo restablezco el árbol de trabajo sin mover HEAD?

Dada una rama git con algunas confirmaciones (C es la confirmación más reciente):

A -> B -> C

¿Cómo restablezco mi espacio de trabajo para que todos los archivos estén en el estado en que estaban en el commit B, pero HEAD todavía está en C?

He miradogit-reset, pero ninguna de las opciones parece ayudar. La página del manual sugiere que todos los modos diferentes moverán HEAD:

--soft
   Does not touch the index file or the working tree at all 
   (but resets the head to <commit>, just like all modes do).

He intentadogit reset HEAD~&nbsp;pero eso mueve la CABEZA.