Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git commit style: All changed files at once or one at a time?

I am saving my work at night with a single commit for many files. I wonder if it would be better to commit for each file but this seems like a lot more work.

I have no problem with the way things are now but I plan to put my code on GitHub and I want it to be easy to understand.

I'm wondering what the rest of you who use git are doing. Also if you could kind of spell it out for me. I'm new to Git and I've been using TortoiseGit and gitk in Windows.

like image 341
loop Avatar asked Sep 15 '11 03:09

loop


People also ask

How do I commit all changed files?

Enter git add --all at the command line prompt in your local project directory to add the files or changes to the repository. Enter git status to see the changes to be committed. Enter git commit -m '<commit_message>' at the command line to commit new files/changes to the local repository.

How many different changes should be in a single commit?

One of these responsibilities is taking care of how changes are inserted into the VCS, creating a commit which purpose should reflect one change and one change only. Also known as an atomic change.

How do you see which files were changed in a commit?

Find what file changed in a commit To find out which files changed in a given commit, use the git log --raw command. It's the fastest and simplest way to get insight into which files a commit affects.


2 Answers

When to commit and what to commit is an art, and there are no black-and-white rules. That being said, there are habits that are easier to understand than others.

In general, I think you should optimize your commits for understandability - if you go back and read the diff for the commit, can you figure out what you accomplished in the changes?

If you want to be more specific, here's a long list of what I think are do's and don'ts:

  • Don't commit after every single little change - every line changed, every file changed, etc.
  • Don't work for an entire day and make one gigantic commit at the end of the day.
  • Do separate out commits for different features - e.g. developing feature foo vs. fixing bug #2.
  • Do a separate commit for moving/renaming files, because it's easier for Git to track this way.
  • Do think about optimizing for revertability: If you dislike a change that you made, is it easy to undo it even after new changes have been piled on top?
like image 68
Nayuki Avatar answered Oct 17 '22 02:10

Nayuki


"Easy to understand" means also:

  • commits representing not just "checkpoint" (like they would if you committed after each file modification), but a coherent state of the code
  • easy to git bisect (ie each commit should represent a change in a task, which compiles and add an evolution or a new feature, and not a "checkpoint commit", which would make the git bisect fails way too soon)

See "understanding the Git workflow" for more: you need to differentiate:

  • private branches (that you never push), where you can commit basically at any time, and
  • public branches (that you will push on GitHub), which needs to be clean-up and have meaningful commits.

So pay attention to the "fast-forward" merge that Git uses by default: don't forget to clean-up the history of branches you are about to merge that way into public branches.

like image 23
VonC Avatar answered Oct 17 '22 00:10

VonC