Interactive Git Checkout.

Published on July 24, 2024
Written by Victor Cobos

Tired of the constant back-and-forth with git checkout to switch branches? It's time we streamline the process. Let's craft a nifty branch switcher to navigate our repositories with ease.

For our branch switcher, we'll leverage the power of fzf, the fuzzy finder. This tool will make finding and switching branches as easy as typing a few letters of the branch name.

To build our interactive branch switcher, we'll use the following command:

git checkout $(git branch -a -vv --sort=-committerdate | fzf --header 'git checkout' | awk '{print $1}' | sed 's#remotes/origin/##' | xargs)

Here's a step-by-step explanation of each segment:

git branch -a -vv --sort=-committerdate: lists all branches available locally and remotely (-a), with verbose details (-vv), sorted by the last commit date in descending order (--sort=-committerdate). It ensures you see the most recently updated branches first, making it easier to navigate through active development branches.

fzf --header 'git checkout': lets you interactively choose a branch from the list, with a header git checkout for clarity.

awk '{print $1}': processes the selected line to extract just the first field, which should be the branch name or the remotes/origin/branch_name for remote branches.

sed 's#remotes/origin/##': removes the remotes/origin/ part from the branch name if it's present, making it suitable for checkout.

xargs: used to construct the final command with the processed branch name as the argument to git checkout.

Let's make a global git alias for this command so we can use it more seamlessly. If we want to use interactive checkout on git ci, here's how to set up a global git alias for it:

[alias]
  ci = "!git checkout $(git branch -a -vv --sort=-committerdate | fzf --header 'git checkout' | awk '{print $1}' | sed 's#remotes/origin/##' | xargs)"

But enough theory and let's see how it feels:

By combining these commands, we craft a powerful and interactive branch switcher that not only saves time but also integrates seamlessly into any git workflow, making branch management more intuitive and efficient.

Subscribe to get future articles via the RSS feed .