Git Branch Naming Conflicts in Azure DevOps
Special thanks to my fantastic colleague Fatih Kucukkara for helping figure these details out.
đź§© What They Are and How to Fix Them
If you’ve ever pushed a branch to Azure DevOps and been greeted with a cryptic error like this:
[remote rejected] bug/456789-fix-something -> bug/456789-fix-something (Name conflicts with refs/heads/Bug/987654-fix-another-thing)
You’re not alone. This error can be frustrating, especially when everything looks fine locally. Let’s break down what’s happening and how to resolve it.
🔍 Understanding the Error
This error means that Azure DevOps is rejecting your push because the branch name you’re trying to use conflicts with an existing branch name—but not in the way you might expect.
The culprit? Case sensitivity.
While Git is case-sensitive on most systems, Azure DevOps treats branch names as case-insensitive. So if you have:
bug/456789-fix-something
Bug/987654-fix-another-thing
Azure DevOps sees these as potentially conflicting because it doesn’t distinguish between bug/
and Bug/
.
🛠️ How to Fix It
Here are a few ways to resolve this issue:
âś… 1. Rename Your Branch Locally
Avoid the conflict by renaming your branch to something unique:
git branch -m bug/456789-fix-something bugfix/456789-fix-something
git push origin bugfix/456789-fix-something
This sidesteps the naming conflict entirely.
âś… 2. Delete the Conflicting Remote Branch (If Safe)
If the conflicting branch is no longer needed and you’re sure it’s safe to remove:
git push origin --delete Bug/987654-fix-another-thing
Then retry your push.
âś… 3. Adopt a Clear Naming Convention
To prevent future conflicts, consider using a consistent and distinct naming convention for branches—such as feature/
, bugfix/
, hotfix/
, etc.—and avoid mixing cases.
đź§ Final Thoughts
This issue is a great reminder that case sensitivity can behave differently across systems, and that naming conventions matter—especially in collaborative environments like Azure DevOps.