12 Branching (git branch)

Key terms/command

  • Branch: independent line of development typically used to develop new features without disturbing the rest of the repository. The default branch is called the “Master” branch.

  • git branch: handles the creation, renaming and deletion of branches. Note that git checkout is used to switch between branches.

Want to create or edit a new script or function but not ready to make it live (available to everyone) just yet?

Create a new branch!



12.1 Check what branch you’re on

If you’ve never changed a branch. You’re likely using the master or main branch.

It’s always a good idea to check what branch you’re using:

## * master

The one marked with the * is the name of branch that you’re currently on, also known as the active branch.


12.2 Create new branch

To create a new branch, we can enter:

For example, if we want to make a test a new function on a new branch, we can create the new branch by entering:

To make sure the branch exists, we can enter:

##   cool_new_function
## * master


12.3 Switch between branches (git commit)

To switch to the new branch, use git checkout <branch_name>

Example:

## Switched to branch 'cool_new_function'

Let’s check that we actually switched.

## * cool_new_function
##   master

Notice that the * is now on cool_new_function.

Note: You can also create and switch to a branch in one command using:

Now that you’re in your new branch, you can make, edit, and commit script(s) as you want without affecting anything on the master branch.

## [cool_new_function e388566] added cool new function
##  1 file changed, 0 insertions(+), 0 deletions(-)
##  create mode 100644 cool_new_function.sh
## cool_new_function.sh
## foo.txt
## ignore_this.txt


12.4 Merge branch

Ready to make the modification available to everyone? Let’s merge the change back to the master branch.

First, we have to switch back to the master branch git checkout master and then merge the commit git merge <branch_name>

## Switched to branch 'master'
## foo.txt
## ignore_this.txt

Notice that there is no cool_new_function.sh file in the master branch.

## Updating e9b18f4..e388566
## Fast-forward
##  cool_new_function.sh | 0
##  1 file changed, 0 insertions(+), 0 deletions(-)
##  create mode 100644 cool_new_function.sh
## cool_new_function.sh
## foo.txt
## ignore_this.txt

The cool_new_function.sh file is now available on the master branch after merging.


12.5 Delete a branch

Done using a branch or created one by accident?

Delete the branch by entering:

## Deleted branch cool_new_function (was e388566).
## * master

BONUS (Advanced x 2 topic) - detached HEAD

Remember the previous chapter mentioned a concept about ‘detached HEAD’? Now you have tried branching, you could understand a bit more how detached HEAD can occur, and how branching can help preventing commit loss.

12.5.1 Purposely enter a detached HEAD and create a commit

## Note: checking out 'HEAD~2'.
##
## You are in 'detached HEAD' state. You can look around, make experimental
## changes and commit them, and you can discard any commits you make in this
## state without impacting any branches by performing another checkout.
##
## If you want to create a new branch to retain commits you create, you may
## do so (now or later) by using -b with the checkout command again. Example:
##
##   git checkout -b <new-branch-name>
##
## HEAD is now at [commit identifier] [commit message]
## [master 6e77556] Adding loss.txt while in detached HEAD
##  1 file changed, 0 insertions(+), 0 deletions(-)
##  create mode 100644 loss.txt

12.5.2 Return to master branch

## Warning: you are leaving 1 commit behind, not connected to
## any of your branches:
##
##  2d8a023 Adding loss.txt while in detached HEAD
##
## If you want to keep it by creating a new branch, this may be a good time
## to do so with:
##
##  git branch <new-branch-name> 2d8a023
##
## Switched to branch 'master'

The output would warn you that you are “leaving 1 commit behind”.

12.5.3 You are now back in the ‘master’ branch, and loss.txt is gone (check with ls)

Luckily, the output message actually tells you how to recover those changes (for now, before Git eventually deletes it).

Now if you switch to that branch you just created (use git checkout), you will see loss.txt.


You have started using branches in Git!