There are a few questions in this post, here is my take on some answers:
First, to "clone" a previous commit, you can do something like this:
git clone REPO_URL
git checkout HEAD~1 // checks out the last commit's first parent
Use ~1
to access the last commit's first parent, and increment the number to get the parent's parent and so on. More on tilde and caret notation.
The two commands above will put you in a detached HEAD state, which may or may not be important based on context. For example, it isn't important if you are cloning as part of your deployment scripts and all you care about is accessing a previous commit (say, as part of a rollback strategy).
If you need to begin work from this point in history, you can run
git checkout -b NEW_BRANCH_NAME
A good git GUI? For me SourceTree is the best.
What are branches? In my own words, a branch is just a very easy way to pivot. Say you are working on one branch, master
and you want to try an experiment. Easy, just git checkout -b experiment
and you are quickly in a safe place to break stuff.
What's different between git and svn?
git is a distribute version control system. svn is not. Also, branching (mentioned above) is easier in git.
For tagging, I don't know if there's "One True Way" (is there ever?) but just explore the git tag
command. One great thing about git is how easy it is to clone a duplicate of your repo on your local computer (or wherever) and do whatever you want to it and see what happens. If you mess something up, just delete the directory. So, you can experiment with git tag
in some testing directory and see what you like.