I've introduced a few people to Git over the past few years, and I've found it really useful to introduce people to git "from the bottom up"[0].
I also found that git commands started making more sense when I realised that even in the UI, there's more consistency than is immediately apparent. Commands are named for how they manipulate data. So `git checkout` is for copying data into your working copy, `git rebase` is for rewriting a set of commits, `git reset` is for pointing the index at a commit.
I also found that git commands started making more sense when I realised that even in the UI, there's more consistency than is immediately apparent. Commands are named for how they manipulate data. So `git checkout` is for copying data into your working copy, `git rebase` is for rewriting a set of commits, `git reset` is for pointing the index at a commit.