Why blueprints can't be merged
An Unreal blueprint is saved as a .uasset file — a packed binary format that encodes nodes, connections, variables, and default values. It's not text. It's not JSON. Diff tools see it as an opaque blob.
When two people edit the same blueprint on parallel branches and try to combine, there's no meaningful "merge" operation — you can only pick one version or the other. Whatever you don't pick is lost.
The prevention strategy: locking
Since you can't merge the conflict, you must prevent the parallel edit. The standard answer across game dev is file locking, also called exclusive checkout.
The workflow:
- Before opening a blueprint in the editor, lock it in the desktop app.
- Edit the blueprint. Save and close.
- Commit the change. The lock releases automatically.
If a teammate tries to lock the same blueprint while you hold it, they're told who has the lock and can plan accordingly. Two parallel edits never happen.
What to lock (and what not to)
Always lock before editing:
- Blueprints (.uasset) — especially widely-shared ones like player controllers, game modes, UI widgets.
- Levels (.umap) — large, unmergeable, high-risk.
- Materials and material instances — binary .uasset.
- Animation blueprints, state machines, montages.
Generally don't need to lock:
- Config files (.ini) — text, merges fine.
- C++ source — text, handled by normal diff/merge.
- Static meshes, textures, audio — you can lock if two people are touching them, but they're usually "owned" by one role at a time.
Team habits that keep conflicts rare
Technical locking is only half the battle. The other half is communication:
- Use informative lock messages."boss fight balance pass, ETA 3h" tells teammates when they can pick up adjacent work. "editing" tells them nothing.
- Release locks at end of day. Commit what you have, release the lock, re-lock tomorrow. Dangling overnight locks block distributed teams across time zones.
- Call out shared blueprints in planning. If two tasks both touch the player controller, sequence them or decide explicitly who goes first.
- Split large blueprints.A character blueprint that's touched by five people every sprint deserves to be broken into smaller components. Refactor when it becomes a bottleneck.
What to do when you hit a conflict anyway
Sometimes locking fails — someone bypassed it, the team forgot, or two branches diverged over a weekend. When you see the "blueprint was edited on both sides" situation, the recovery playbook:
- Don't panic-pick. Figure out who changed what before overwriting anything.
- Ask both editors to describe their changes. Usually one set is larger; it should win, and the smaller set will be re-done manually.
- Open both versions side by side. USourceControl lets you download any prior version to a temporary folder. Have the smaller-change author look at the larger-change version and re-apply their edits on top.
- Commit the combined result with a message explaining what happened. Lock the file during this process to prevent a third edit compounding the problem.
Advanced: Unreal's built-in blueprint diff
Unreal Editor has a built-in blueprint diff tool (Tools → Blueprint Diff Tool) that compares two .uasset files visually — showing added, removed, and modified nodes.
This is useful for reviewing a teammate's change before accepting it, or for the "describe the changes" step of the recovery playbook above. USourceControl lets you download any historical version of a .uasset to feed into this tool.
The diff tool doesn't resolve conflicts automatically — nothing does, for binary blueprints — but it makes the manual reconciliation much less error-prone.
