When I am in the git command line, it’s rather difficult to selectively commit some files and keep the rest for another commit. How do I make this easy?
Ironically, this is one of the things that git makes really easy, but you have to learn a concept that other version control systems just don't have. That idea is the "staging area" (technically known as the "index") which essentially keeps track of the content that will be in your next commit. When you say git add somefile that's not saying "start tracking a file of this name", it means "stage the content of the file, as it is right now". You can do this for just the files you pick in your working tree - then, a plain git commit just turns the contents of the staging area into your next commit.
Using the -a parameter to git commit basically says "I don't care about this staging area / index business, just stage everything that's being tracked before committing". So, until you're happy with the idea of staging particular files, I'd just do a plain "git commit".
It's worth running git status frequently when you're adding files to get used to this idea - it shows files in up to three sections, although not all will always be present if there's nothing to report in that section:
Changes to be committed:
This lists changes that have been staged, so will be in the next commit. This includes new files, files whose deletion has been staged, and any files with staged changes.
Changed but not updated:
This lists files that have changes that haven't been staged yet.
Untracked files:
These are the files that git doesn't know anything about - typically you'll want to either ignore them, by adding patterns to your .gitignore file, or add them with git add.
Note that files can appear in both of the first two sections. For example, you can change your Makefile, then add it to the index with git add Makefile. Then if you go on to make more changes to Makefile, save it, and then run git status, you'll see that it's listed both in "Changes to be committed" and "Changed but not updated" - that's because (as mentioned above) git add Makefile just stages the exact content of the file when you ran the command. If you run git add Makefile again, the stage version will be overwritten by the version in your working tree, so that all the changes you've made to that are staged.
Another couple of tips might be worth adding, about the useful pair of commands git diff and git diff --cached - essentially, their meanings are:
git diff: "Which changes have I not yet staged?"
git diff --cached: "Which changes have I staged already?"
As you can probably work out from the above, that's because git diff shows the difference between the staging area and your working tree, while git diff --cached shows the difference between your last commit and the staging area.