What is Upstream in Git: Explanation and Usage
upstream refers to the remote branch that your local branch tracks and syncs with. It is the source branch where changes are usually pulled from or pushed to, helping you keep your work updated with the main project.How It Works
Think of upstream as the main river your local branch flows into. When you create a branch locally, you can link it to a remote branch called the upstream branch. This connection tells Git where to fetch new changes from and where to send your updates.
For example, if you are working on a feature branch, the upstream branch is usually the main branch on the remote repository. When you run commands like git pull or git push without extra details, Git uses the upstream branch to know which remote branch to interact with.
This setup helps keep your local work in sync with the shared project and avoids confusion about where changes should come from or go to.
Example
This example shows how to set and check the upstream branch for a local branch.
git checkout -b feature-branch # Create a new branch named feature-branch git push -u origin feature-branch # Push the branch to remote and set upstream git branch -vv # Show local branches with their upstream info
When to Use
You use upstream branches whenever you want to keep your local branch connected to a remote branch for easy syncing. This is common when collaborating with others on shared projects.
For example, when you start working on a new feature, you create a local branch and set its upstream to the remote feature branch. This way, you can pull updates from teammates and push your changes back without typing full branch names every time.
Also, upstream branches help Git commands like git status show if your branch is ahead or behind the remote, so you know when to sync.
Key Points
- Upstream is the remote branch your local branch tracks.
- It simplifies syncing changes with
git pullandgit push. - Setting upstream is done with
git push -uorgit branch --set-upstream-to. - Git shows upstream info in
git branch -vv. - Helps avoid confusion in collaborative workflows.