I first do a git diff to review the changes I made and decide what I’m going to commit first if several commits are desired.
Then I use git add -p. It’s a bit daunting at first, but you get used to it. It walks you through all the changes (as patch hunks) and you can decide whether to add (y) it or not (n). Then you have extra commands for more control, like add the whole file (a) or skip it (d), split the current hunk into smaller parts (s), and even edit the patch hunk in your editor (e).
git add -p
Since I’ve been doing this, my commits are much more atomic, because I don’t limit myself to committing whole files at a time. It’s also a great safeguard, because you actively look at anything you’re about to commit, and are less likely to commit debug statements, for example. You will still forget to add new files, though, I can guarantee it. ;-) (speaking of new files, you can add them with git add -N my_new_file to record the addition of the file without its contents. Then you see the whole file in git diff and git add -p, which is sometimes useful.
git add -N my_new_file
The -p flag also works for reset, checkout (useful to remove debug print statements) and stash.
Editing the patches is more difficult, but it’s sometimes handy and you get used to it.
I didn't know about git add -N, thanks, that will be a useful tool in my belt!
git add -N
Instead of git add -p, I use git-istage tool. For me is more handy than git add -p.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.