Fetch and pull all branches in Git

David Y.
jump to solution

The Problem

After cloning a Git repository that has many branches, I can only see a single branch in my local copy. How do I pull all branches from the remote repository and have them show up in the output of git branch?

The Solution

To create local equivalents of all branches in the remote repository, we can run the following bash for loop:

for remotebranch in `git branch -r | grep -v HEAD`; do
  git branch --track ${remotebranch#origin/} $remotebranch
done

This code loops through all branches in the remote repository and creates local equivalents for them. For example, when the script encounters origin/dev, it will create a local dev branch which tracks it (note the use of substitution syntax to remove origin/). These branches will now show up in the output of git branch and can be checked out, committed to, pulled and pushed.

If we only need to view the remote branches, and not work on them, we can use git fetch instead:

git fetch --all

We will then be able to view the repository state at each of these branches in detached HEAD state by running git checkout origin/remote-branch-name.

If we only need to work on one or two remote branches, we can create and check out local versions of them manually using the following git checkout command:

git checkout -b local-branch-name origin/remote-branch-name
Abort a merge in Git
David Y.
Show the current branch name in Git
David Y.
Resolve merge conflicts in Git
David Y.

Considered "not bad" by 4 million developers and more than 150,000 organizations worldwide, Sentry provides code-level observability to many of the world's best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.

Sentry