Managing shared code starts with understanding how your local commits reach teammates. The git push remote branches workflow controls what changes you publish and when.
Use this guide to handle remote branches confidently in everyday collaboration, with clear commands, safety checks, and practical patterns you can apply immediately.
| Action | Command | Result | When to Use |
|---|---|---|---|
| Publish a new feature branch | git push origin feature/login | Creates remote branch, sets upstream | Starting collaboration on a feature |
| Sync local branch with updated remote | git pull origin main && git push origin main | Rebases local commits on latest main | Before merging or code review |
| Overwrite remote branch with local | git push --force-with-lease origin feature/login | Rewrites remote history safely, rejects if changes conflict | Fixing commits before merge |
| Delete a remote branch | git push origin --delete hotfix/urgent | Permanently removes remote branch | After merging a temporary fix |
Setting Upstream Tracking for Remote Branches
Upstream tracking links your local branch to a specific remote branch so commands like git pull and git push behave predictably.
Push with Set Upstream
Use git push --set-upstream origin feature/ui-refresh to establish the relationship in a single step. After this, you can simply run git push without extra arguments.
Verify Tracking Configuration
Run git branch -vv to confirm which local branch tracks which remote branch. Correct tracking reduces confusion when multiple teammates work on the same code.
Pushing to a Fresh Remote Branch
When you start work on a new feature, create and push a dedicated branch instead of pushing to main or develop directly.
Create and Push in One Command
git push -u origin feature/api-refactor automatically creates feature/api-refactor on the remote and sets upstream. This keeps your workflow clean and traceable for reviewers.
Branch Naming Conventions
Use descriptive prefixes like feature/, hotfix/, or chore/ so teammates understand the purpose of the remote branch at a glance.
Collaborating and Syncing Remote Changes
Before pushing large updates, rebase or merge the latest main to avoid complex conflicts for your teammates.
Rebase Before Push
Fetch the latest main, rebase your feature branch on top, and then push. This keeps history linear and easier to follow during code review.
Coordinate with Teammates
Communicate when you plan to push to a shared remote branch, especially for integration branches where merge conflicts are more likely.
Force Push Patterns and Safety
Use force pushes only when necessary and prefer safer options like --force-with-lease to avoid overwriting others' work.
Force Push with Lease
git push --force-with-lease origin feature/login rejects the push if someone else has added commits you do not have locally, protecting recent work.
Coordinate Emergency Overwrites
If you must rewrite public history, notify affected teammates immediately so they can reset their local copies safely.
Streamlined Branch Publishing Workflow
- Create a descriptive feature branch locally
- Commit changes with clear, scoped messages
- Push to remote with upstream tracking set
- Sync with latest main before merging
- Use --force-with-lease only when necessary
- Coordinate deletes and rewrites with your team
FAQ
Reader questions
How do I push a local branch to a new remote branch without deleting anything?
Use git push origin local-branch:remote-branch. This creates remote-branch without affecting any other branches.
What should I do if git push is rejected because the remote contains work I do not have?
Fetch and merge or rebase with the remote branch, resolve any conflicts, then push your updated history.
Can I push to main or develop directly, or should I always use a feature branch?
Avoid pushing directly to main or develop. Use feature branches and merge requests to keep integrations controlled and reviewable.
Why does my push fail after I force pushed on a shared branch?
Others may have new commits based on the previous history. Communicate the overwrite, then ask teammates to reset their local branches to the new upstream commit.