Hopefully, you don’t need to start a Gitflow hotfix too often. In fact, life is best if you never have to start the Gitflow hotfix process at all.
A Gitflow hotfix branch is only required when a critical bug or security flaw is found in live, publicly facing and globally accessible applications or binaries. The flaw is in a tagged commit on the Git master/main branch, and it has to be addressed immediately. The Gitflow hotfix branch creation process is the recommended workflow to address stop-the-world bugs in the master branch.
Properties of the Gitflow hotfix
Here’s the skinny on the Gitflow hotfix branch process:
- A hotfix branch is created directly off the latest commit on master/main.
- The only commits allowed on the hotfix branch are ones that explicitly address the software bug.
- No feature enhancements or chores are allowed on the Gitflow hotfix branch.
- The hotfix branch merges into both master and develop branches when its lifecycle ends.
- The hotfix branch is deleted after it is merged or rebased into master and develop branches.
Simple Gitflow hotfix example
The following Gitflow hotfix example demonstrates how to use the hotfix process in a software development project.
First, initialize a Gitflow-based repository.
[email protected] MINGW64 /c/git-flow-tutorial $ git flow init
Note that there are only two branches in existence after the “git flow init” call and no tags in the recently created repository.
$ git branch -a * develop master $ git tag -l
Gitflow hotfix start
Now, we create the hotfix branch, add a file to the repository, and then make a Git commit.
$ git flow hotfix start '0.1.1' Switched to a new branch 'hotfix/0.1.1' $ touch hotfix.html $ git add . $ git commit -m "A git flow hotfix from start to finish." [hotfix/0.1.1 053131c] A git flow hotfix from start to finish. 1 file changed, 0 insertions(+), 0 deletions(-) $ git branch -a develop * hotfix/0.1.1 master $ git tag -l
Gitflow hotfix finish
When the “Gitflow hotfix finish” command is called, the commit is merged into both master and develop branches and then deleted.
$ git flow hotfix finish '0.1.1' Switched to branch 'master' Merge made by the 'recursive' strategy. Switched to branch 'develop' Merge made by the 'recursive' strategy. Deleted branch hotfix/0.1.1 [email protected] MINGW64 /c/git-flow-tutorial (develop) $ ls hotfix.html $ git checkout master Switched to branch 'master' [email protected] MINGW64 /c/git-flow-tutorial (master) $ ls hotfix.html
The hotfix branch no longer exists, and the only reminder it was ever here is the tag left on the master branch.
$ git branch -a develop * master $ git tag -l 0.1.1
Nobody likes to deal with production problems or bugs on their main branch. But when these issues do occur, the Gitflow hotfix branch is there to guide your development efforts and ensure urgent code changes get merged into both master and development branches.