I’ve always thought of git reset and git checkout as the same, in the sense that both bring the project back to a specific commit. However, I feel they can’t be exactly the same, as that would be redundant. What is the actual difference between the two? I’m a bit confused, as the svn only has svn co to revert the commit.
ADDED
VonC and Charles explained the differences between git reset and git checkout really well. My current understanding is that git reset reverts all of the changes back to a specific commit, whereas git checkout more or less prepares for a branch. I found the following two diagrams quite useful in coming to this understanding:


ADDED 3
From http://think-like-a-git.net/sections/rebase-from-the-ground-up/using-git-cherry-pick-to-simulate-git-rebase.html, checkout and reset can emulate the rebase.
git checkout bar
git reset --hard newbar
git branch -d newbar


git resetis specifically about updating the index, moving the HEAD.git checkoutis about updating the working tree (to the index or the specified tree). It will update the HEAD only if you checkout a branch (if not, you end up with a detached HEAD).(actually, with Git 2.23 Q3 2019, this will be
git restore, not necessarilygit checkout)By comparison, since svn has no index, only a working tree,
svn checkoutwill copy a given revision on a separate directory.The closer equivalent for
git checkoutwould:svn update(if you are in the same branch, meaning the same SVN URL)svn switch(if you checkout for instance the same branch, but from another SVN repo URL)All those three working tree modifications (
svn checkout,update,switch) have only one command in git:git checkout.But since git has also the notion of index (that "staging area" between the repo and the working tree), you also have
git reset.Thinkeye mentions in the comments the article "Reset Demystified ".
On those points, though:
LarsH adds in the comments:
De Novo concurs in the comments: