Illustration of a code branch with an exclamation indicating a merge conflict near the end of the branch.
January 23, 2023

What Is a Merge Conflict? How to Avoid Merge Conflicts in Git

Version Control

You’re working on a team project and have made substantial progress. You go to submit your code changes only to find out someone else on your team was working on the same file(s) and submitted their changes before you did. Now you have the problem of conflicting code – and the time required to resolve your changes against the other person’s changes. This is called a merge conflict and can be a source of headache for many developers.  

Read along or jump ahead to the section that interests you most.

Back to top

What Is a Merge Conflict?

A merge conflict occurs when a version of a file has been submitted that is newer than the version of the file you have started to base your changes on.

In this blog, we look at what merge conflicts are, how they happen in Git, and how you can avoid them with a few simple tips to streamline your development.

Back to top

Merge Conflicts in Git

Git is a popular open source version control tool. While Git is a great option for developers, it can become troublesome when teams are trying to collaborate and work on the same files. This is because Git uses a decentralized model where developers often check out entire repos (git clone) onto their local drive and work offline from the server for extended periods of time.

Then, when the developer is ready to submit his/her changes (via the “git push” operation), that person may discover other conflicting changes to the same set of code have already been committed/pushed to the same branch in the meantime. If you are currently working in Git and are up against a merge conflict, here’s how you can resolve your merge conflict.

📗 Related Resource: Git Overview: Strategies for Better Git Development

How to Resolve Merge Conflicts in Git

Depending on your Git collaboration solution, there are different recommended paths for resolving merge conflicts. Click the links below for detailed information:

If you are simply using a Git CLI tool, you will need to fetch/pull the latest changes into your locally cloned repo and then resolve the conflicts by performing a merge (or series of merges). Git itself will attempt to perform an auto-merge of the content. That auto-merge will succeed as long as changes are not in the same region of a given file. When the changes are in the same region, Git will add special character markings in the conflicting files to identify where a developer’s local changes conflict with the latest changes committed to the remote repository (where you’re attempting to commit your change to).

At this point, you can choose to remove your changes, remove the other person’s changes, keep both sets of changes, or remove all changes. Once decided, the developer simply needs to push the changes back to the remote repository.

Back to top

How to Avoid Merge Conflicts in Git 

Now you know how to resolve a merge conflict in Git, but what if you could avoid these extra steps by preventing merge conflicts?  

Helix Core by Perforce uses a centralized model where developers are connected to a central server and the server is aware of what files each developer has in their respective client. This model encourages each developer to commit their respective changes early and often, thus eliminating many driving reasons of potential merge conflicts. 

📗 Related Resource: Git vs Perforce: How to Choose (and When to Use Both)

Helix Core also offers file locking capabilities, which can be used to prevent conflicting changes from ever occuring in the first place. These file locking capabilities are especially useful for binary files which usually cannot be merged. 

Using Streams for Branching and Merging

Helix Core’s branching mechanism is called Streams. Streams simplify branching and provide a built-in visual mapping of the relationship between branches. This built-in visual mapping is called the Stream Graph and is available in the Helix Visual Client (P4V).

📗Related Resource: What Is Perforce Streams?

The Stream Graph alerts users when there are changes in a related branch that should either be merged down from a parent branch or copied up to a parent branch. This paradigm encourages a “merge early, merge often” best-practice which helps to avoid gigantic merge conflicts. 

When a merge conflict does occur within Helix Core, users can easily walk through a resolve process using the Helix Visual Client (P4V) or using the command-line (P4). The resolve dialog walks the user through the options available to proceed with the merge. 

Back to top

Try Helix Core and Avoid Merge Conflicts 

Perforce Streams is just one of the many features Helix Core provides to help accelerate development. 

Helix Core can handle everything –– thousands of users, millions of daily transactions, and terabytes of data. And as your teams and projects grow, Helix Core can deliver files and feedback around the globe without a WAN wait. 

Helix Core is free for up to five users –– so go ahead and try today to reduce merge conflicts and spend more time developing.  


Recommend Reading:

Back to top