Should you create a new branch for every set of changes or is okay to work on the master branch?
I create a new branch when I will be doing a number of related changes that I may decide not to keep, but would tear apart and break the master branch while I'm working on them. Especially if I want to make multiple checkins along the way.
For example, let's say that I have a simple graphical calculator application and I want to add parenthesis and order of operations, but I'm not sure whether it'll work the way I'm thinking about doing it. I'd create a new branch, checking in my changes as I go, and if I like the result at the end then I'll merge with Master.
This is especially good if I've got people asking for bugfixes to the released version (built off of master) while I'm working. I can easily switch to master, fix a bug, rebuild, re-release, and switch back to my development branch.
Should you create a new clone for every branch?
I would not suggest creating a new clone for each branch unless you don't want to check local changes in before switching. But even then you can use the "git stash" command to save your changes while you switch branches, do work, and switch back.
When do you merge your local branches with your local master?
You should merge your local changes with the master branch when you are able to build successfully and you think you've implemented the feature you were aiming for. Don't break the master branch.
When(and how) do you create a remote branch?
You create a remote branch by creating a local branch and pushing while you have that local branch checked out. You should only push a new branch to create it remotely if you want a backup of it or if other people may want to check it out. If you are just playing with a feature locally, you probably don't want to push it.
Do you write a message relative to the file you changed or relative to the project?
Relative to the project. Make your commit messages as clear as you can, but try to do write a concise summary line, then leave a blank line, then put details about your commit. Git is tree-based, rather than file-based, so if a feature or bug-fix touched a bunch of files, check them all in at once with the same message.