| `git checkout` is indeed a stupid command, because it has 3 modes: > git checkout [--detach|-b] <commit-ish> Set HEAD to a new place and sync the working-directory/index to it. > git checkout <paths> Copy paths from the index to the working directory. > git checkout <tree-ish> <paths> Copy paths from a given commit to the working directory. This means that "git checkout HEAD file" is different from "git checkout file". Similarly, `git reset` has 2 modes: > git reset <tree-ish> <paths> Copy paths from a given commits to the index, leaving the cwd unchanged. > git reset [--soft | --mixed | --hard] <commit> Set *HEAD to a new place, and optionally sync the working directory/index to it. This is obviously terrible, but changing the names now might be worse. |