I am currently working on a small project, and I am working on getting it functional, but I question when exactly should I make commits. I usually just do it when I am done with working on it, but I know in practical projects often times commits are for one specific thing but given the project does not even work yet what exactly do I do.
Hardware can fail randomly at any time. I would commit and push to a private repo as frequently as you can. You can always squash the commits later when it’s complete. Definitely worth committing whenever you complete a feature, or before you remove any code (change of design, you may change your mind and want the code again).
For my team, we create branches off of dev to start working on a specific feature. It’s really up to the dev how often they commit to that branch but I recommend often to prevent losing any work. Once the feature is done we merge the branch to dev and roll all of the commits into one so looking at the history on dev, each commit represents 1 feature.
I feel like this is very subjective, but I usually commit whenever a) I have to edit only one thing in a certain file. If I am reasonably sure that I’ll only change this one thing in a file, I’ll commit b) I feel like what I have just done works, and it is worth writing an explanatory commit comment for: This could be whenever I add or modify a helper function, when I make a new struct, fix a bug, refactor something, etc. c) I am done with it entirely :3
I hope this helps at least a little!
At your stage I usually try to avoid committing code that doesn’t compile/has syntax errors etc.
Later on I try to make sure that I can go to any commit in the history, and have a program that runs. For example, I don’t want to knowingly add code related to one feature that crashed the entire application just in case I need to go back later. But it’s up to you to decide how unfinished the state of the feature/program is allowed to be when you commit.
And if it’s a side project that only you will work on, you might also just say screw it, even if it catches on and other people will look at your code, they probably won’t care that much about how organized the early work was :)