¿Cuál es la diferencia entre "git reset" y "git checkout"?

Siempre he pensado engit reset ygit checkout igual, en el sentido de que ambos vuelven a llevar el proyecto a un compromiso específico. Sin embargo, siento que no pueden ser exactamente lo mismo, ya que eso sería redundante. ¿Cuál es la diferencia real entre los dos? Estoy un poco confundido, ya que el svn solo tienesvn co para revertir el commit.

ADICIONAL

lossiguiente diagrama explica la diferencia, aunque de una manera posiblemente demasiado simplificada o incorrecta. ¿Qué piensas? ¿Está mal o demasiado simplificado?

AÑADIDO 2

VonC y Charles explicaron las diferencias entregit reset ygit checkout Realmente bien. Mi comprensión actual es quegit reset revierte todos los cambios a una confirmación específica, mientras quegit checkout más o menos se prepara para una sucursal. Encontré los siguientes dos diagramas bastante útiles para llegar a este entendimiento:

AGREGADO 3

Dehttp://think-like-a-git.net/sections/rebase-from-the-ground-up/using-git-cherry-pick-to-simulate-git-rebase.html, finalizar la compra y restablecer puede emular el rebase.

git checkout bar 
git reset --hard newbar 
git branch -d newbar 

Respuestas a la pregunta(6)

Su respuesta a la pregunta