Was ist der Unterschied zwischen "git reset" und "git checkout"?

Ich habe immer an @ gedacgit reset undgit checkout as the same, in dem Sinne, dass beide das Projekt auf ein bestimmtes Commit zurückführen. Ich bin jedoch der Meinung, dass sie nicht genau gleich sein können, da dies überflüssig wäre. Was ist der tatsächliche Unterschied zwischen den beiden? Ich bin etwas verwirrt, da der svn nur @ hsvn co, um das Commit zurückzusetzen.

HINZUGEFÜG

Das folgendes Diagramm erklärt den Unterschied, wenn auch möglicherweise zu stark vereinfacht oder falsch. Was denkst du? Ist es falsch oder zu stark vereinfacht?

ADDED 2

VonC und Charles erklärten die Unterschiede zwischengit reset undgit checkout sehr gut. Mein aktuelles Verständnis ist, dassgit reset setzt alle Änderungen auf ein bestimmtes Commit zurück, währendgit checkout bereitet sich mehr oder weniger auf eine Niederlassung vor. Ich fand die folgenden beiden Diagramme sehr hilfreich, um zu diesem Verständnis zu gelangen:

ADDED 3

Vonhttp: //think-like-a-git.net/sections/rebase-from-the-ground-up/using-git-cherry-pick-to-simulate-git-rebase.htm, checkout und reset können die Rebase emulieren.

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

Antworten auf die Frage(12)

Ihre Antwort auf die Frage