Is there a theirs version of git merge -s ours?
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
In the world of Git, merging branches is a common task in collaborative development workflows. Essentially, it combines changes from different branches into a single branch. Git offers a variety of merge strategies to help developers manage how these changes are combined. One of the well-known merge strategies is the "ours" strategy, which prioritizes changes from the current branch over incoming changes. However, developers often wonder if there is an equivalent "theirs" strategy that prioritizes the incoming branch's changes.
Understanding Git Merge Strategies
Before delving into a "theirs" equivalent, it's essential to understand what the "ours" strategy does.
The "Ours" Strategy
The command git merge -s ours <branch> is a merge strategy that favors the current branch over the incoming branch’s changes. It's less about merging changes and more about signaling Git to ignore the other branch's changes entirely. This can be particularly useful in the following scenarios:
- Resolving Large Refactors: When you have refactored a significant portion of the code and want to ignore any conflicting changes from the incoming branch.
- Reintegrating Branches: After a long-lived feature branch has been merged back and further development specifically in the branch is concluded, using "ours" can help stabilize by discarding other irrelevant branch work.
However, using "ours" should be done with caution as it essentially negates other developers' contributions in the targeted branch.
Is There a "Theirs" Strategy?
While there is no direct -s theirs equivalent in Git for merges, you can emulate this behavior using a series of commands with existing tools. The idea is to simulate the behavior of taking all changes from the "theirs" side (i.e., the branch being merged into your current branch).
Emulating "Theirs" Behavior
To simulate a "theirs" merge, you can manually resolve the merge conflicts and forcefully checkout changes from the other branch. Here's a step-by-step guide:
- Merge the Branch:
- Resolve Conflicts by Favoring "Theirs": Iterate over each conflicting file and checkout the changes from the merging branch.
- Stage the Resolved Files: Once the conflicts are resolved using the "theirs" changes:
- Commit the Merge: Finally, commit the changes.
This process essentially lets you mimic a "theirs" strategy without directly having a command like git merge -s theirs.
Comparing "Ours" and "Emulated Theirs" Strategies
Here is a comparison of the two strategies using a table:
| Feature | git merge -s ours | "Emulated Theirs" Strategy |
| Main Behavior | Keeps current branch changes, ignores incoming | Keeps incoming branch changes, ignores current branch conflicts |
| Conflicts Handling | No conflict inspection needed | Requires manual resolution using --theirs |
| Use Cases | Reintegration, ignoring irrelevant changes | Accepting upstream changes over local alterations |
| Automatic in Git | Yes | No, requires manual intervention |
| Risk Level | Potential loss of external contributions | Potential loss of local changes |
Additional Considerations
- Backup: Always create a backup or ensure you have a clean working tree before attempting complex merges.
- Testing: After using either merge approach, run tests to ensure that resulting code changes do not break the build.
- Communication: Coordinate with team members to avoid unexpected loss of critical changes. Make the reasoning behind using a specific strategy clear.
While Git simplifies branch management with powerful merge tools, understanding the rationale and implications behind each strategy is crucial. Using "ours" or implementing an equivalent "theirs" strategy can control how changes are integrated, offering flexibility tailored to specific development processes.

