I use git from the command line all day long. In the process, I issue a lot of git commands. This can get (no pun intended) to be a lot of repetitive typing, especially when branch names get long. To illustrate, it’s no fun to type out git checkout feature/shiny-new-processing-system-database-optimization every time I want to checkout that branch. Of course, you can always use the mouse to copy and paste a long branch name rather than typing the whole thing out.

However, if you’re like me and like to keep your hands on the keyboard, this solution can feel slow. Tab completion would certainly be faster and easier. Unfortunately, the default install of git on some Mac computers doesn’t have tab completion enabled. This was the case for me and at least two of my colleagues.

Fortunately, this is an easy fix. There is a bash script that enables tab completion of git commands and branch names. At the time of writing, this file exists in git’s official repo on Github. In fact, it is likely that this file already exists on your local machine, but, if you’re reading this post, you probably haven’t tapped into its power, yet. In the rest of this article, I will show you how to enable git tab completion in bash on a Mac.

The first step is to figure out whether you already have the git-completion script on your machine. You can use the command sudo find / -type f -name "git-completion.bash" to see if the script already exists on your local machine. Note: the sudo command will require you to enter the password you use to log in to your Mac. Also, this command may take a minute to run, because it looks through your whole file system. Here are some possible locations for the git-completion script, but it’s okay if it’s somewhere else.

If the git-completion.bash script doesn’t exist on your machine, please retrieve it from the link I provided above and save it to your local machine in a new file called git-completion.bash in the /usr/local/etc/bash_completion.d/ directory.

If the git-completion.bash script exists on your machine, but is not in the /usr/local/etc/bash_completion.d/ directory, we should create a copy of it in that directory. A quick sudo cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash should do the trick.

For those who are curious about the /usr/local/etc/bash_completion.d/ directory: it’s for storing new completion commands, and you may have to create it if it doesn’t already exist on your machine.

At this point the git-completion.bash script should exist on your local machine in the /usr/local/etc/bash_completion.d/ directory.

Now we’ll plug the git completion script into bash by pointing to it from ~/.bash_profile. Note: the tilde in the previous sentence refers to the home directory on your computer. Add the following line to ~/.bash_profile: source /usr/local/etc/bash_completion.d/git-completion.bash and save.

The final step is to reload your bash profile. You can achieve this by running source ~/.bash_profile in your current bash session.

There you have it! You should now be able to use tab completion with git commands and branch names. Try it out by typing “git chec” into your terminal and pressing tab. The git-completion script should snap into action and complete your command, so that it reads “git checkout.”

Download our free guide:
Designing, Building, Launching and Supporting Great IoT

If you're involved with bringing a connected smart device to market, this 12-page guide will give you real-world advice on how to launch a successful product. It includes 26 common questions we think every product owner should ask. Topics include:
  • 1Designing the entire lifecycle of your product, from installation to decommissioning.
  • 2Integrating with other products and services.
  • 3Building resiliency into your system to overcome outages and faulty updates.
  • 4Building a robust process for testing your IoT product.
  • 5Much more.

* required