Git References, Commits, and Branches
Posted on August 30, 2020 in Git by Matt Jennings
References
They are pointers to commits.
Three Types of Git References
- Tags and Annotated Tags
- Branches
- HEAD
What is Head?
- HEAD is how git knows what branch you’re currently on, and what the next parent will be.
- It’s a pointer.
- It usually points at the name of the current branch.
- But, it can point at a commit too (detached HEAD).
Lightweight Tags (in practice not used much)
- Lightweight tags are just a simple pointer to a commit.
- When you create a tag with no arguments, it captures the value in HEAD.
- Example:
git checkout master
git tag my-first-commit
Annotated Tags: git tag -a
- Point to a commit, but store additional information.
- Author, message, date.
- Example:
git tag -a v1.0 -m 'Version 1.0 of my blog'
git tag
git show v1.0
Tags and Branches
- Branch
- The current branch pointer moves with every commit to the repository
- Tag
- The commit that a tag points doesn’t change.
- It’s a snapshot!
HEAD-less / Detached HEAD
- When I checked a checkout a specific commit or tag, I go into a detached HEAD state.
- git move the HEAD point to that commit.
- There is no reference pointing to the commits you made in a detached state.
- Save your work:
- Create a new branch that points to the last commit you made in a detached state:
git branch <new-branch-name> <commit>
- Create a new branch that points to the last commit you made in a detached state:
Dangling Commits
- If you don’t point a new branch at those detached HEAD commits, they will not longer be referenced in git.
- Eventually they will be garbage collected.