Automatically track remote branch with git
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
Introduction
Tracking a remote branch in Git means associating a local branch with an upstream branch, usually on origin. Once that relationship exists, commands like git pull, git push, and git status know which remote branch they should compare against. The practical question is not whether Git can do this. It is when Git sets that upstream automatically and how to do it explicitly when it does not.
What Upstream Tracking Actually Means
A local branch can store two pieces of configuration:
- the remote, such as
origin - the merge target, such as
refs/heads/feature-x
You can inspect that with:
If a branch is tracking a remote branch, Git shows the upstream name and the ahead or behind count.
Creating a Local Branch That Tracks a Remote Branch
If the remote branch already exists, the most direct command is:
That creates a local branch named feature-x and configures it to track origin/feature-x.
The older equivalent is:
Both commands are explicit and reliable. They are the clearest way to say, "create the local branch from that remote branch and set upstream now."
Setting Up Tracking for a Branch You Already Created
If you already have a local branch and want to connect it to a remote branch afterward, use:
If you are currently on that branch, you can omit the final branch name:
This is useful when a branch was created locally first or when tracking was lost during manual branch creation.
The Common Push-Based Shortcut
When you create a new local branch and want to publish it while also setting upstream, use:
The -u flag tells Git to remember origin/feature-x as the upstream for the current local branch. After that, plain git push and git pull work without repeating the branch name.
This is one of the most common workflows in day-to-day development:
When Git Does It Automatically
Git often sets tracking automatically in these cases:
- when you clone a repository and check out the default branch
- when you create a local branch directly from a remote-tracking branch using
--track - in some workflows when configuration such as
branch.autoSetupMergeallows it
Still, it is better to know the explicit commands than to rely on guesswork. Tracking problems are rarely about Git being broken. They are usually about Git having no configured upstream for the branch you are on.
Useful Configuration
If you want Git to set upstream relationships more aggressively when branches are created from remote-tracking branches, you can inspect or configure branch setup behavior.
For example:
That changes default behavior, but use it deliberately. Team members should understand the effect rather than inherit it accidentally from copied configuration.
How to Verify and Fix Problems Quickly
When git pull says there is no tracking information, verify the current state first:
Then decide whether the branch should:
- track an existing remote branch
- be published as a new remote branch
- remain local only
That decision determines whether you use git branch --set-upstream-to or git push -u.
Remote Tracking Is Not the Same as Fetching
A remote-tracking branch such as origin/feature-x is Git's local record of what the remote branch looked like after the last fetch. Upstream tracking is the configuration that tells your local branch which remote-tracking branch to compare against.
Those are related but different concepts. You can have origin/feature-x in your repository without your current local branch tracking it.
Understanding that difference clears up a lot of confusion.
Common Pitfalls
A common mistake is assuming git fetch alone creates tracking relationships. It updates remote-tracking references, but it does not automatically bind your local branch to one of them.
Another issue is creating a local branch with a different name from the remote branch and then forgetting to set upstream explicitly.
Developers also confuse origin/feature-x with an actual checked-out branch. It is a reference, not your active working branch.
Finally, do not use git pull blindly. If the upstream is wrong, Git will happily pull from the wrong place once tracking is configured.
Summary
- Tracking a remote branch means storing upstream configuration for a local branch.
- Use
git switch --track origin/branch-namewhen the remote branch already exists. - Use
git push -u origin branch-namewhen publishing a new local branch. - Use
git branch --set-upstream-toto fix tracking on an existing branch. - Check tracking with
git branch -vv. - Remote-tracking references and upstream configuration are related but not the same thing.

