How to resolve a merge conflict in Git
Tags: git, github, tutorial, productivity
Published: 2022-12-26 00:06:02

You are probably here because you, like me and possibly every or almost every developer, had a merge conflict in that one feature Pull Request you you have been working on. Am I right? Then you are in the right place to learn how to tackle that merge conflict and procceed with your work.

![donald duck and mickey fighting](https://media.tenor.com/bAhH_kP8PycAAAAC/donald-duck-mickey-mouse.gif)

But before we jump right into merge conflicts and how to tackle them, let's talk about the Git workflow to have a bit more context.

## 🗺 Git Workflow

The Git workflow is quite easy to understand once you begin to have more experience using it in your projects. Below you can see a great overview of a simple Git workflow. This one is specifically for GitHub, but the same approach is applied to other version control platforms such as GitLab, in case that is what you are using.

![github feature workflow](https://cdn-images-1.medium.com/max/1600/1*iHPPa72N11sBI_JSDEGxEA.png)

The first step in a gitflow is to create a feature `branch`, where you will `commit` all the code changes you want to make in the repository. Then, you open a `pull request` where you will be able to track all the `commits` and `merge` after you have made sure everything looks alright and GitHub `actions` finishes running all the `tests` you have set up to be `merged` in the `master` branch. 

## 💥 How does a merge conflict happen?

This is the question for 1.000.000$ 🤑 A merge conflict happens when we make changes to the codebase and another developer does so too, and we want to merge their changes to our branch, but they create a conflict because there have been changes to the same file or line of code. Let’s simulate a simple case scenario first and then explain how to actually solve a merge conflict. It will surely be clearer after you have seen how a merge conflict actually happens.

### Start a Git repository

The first step is to create a Git repository. You can do so by running the following command: 

```
git init
```

### Create a file to make changes on

Let's create a simple vanilla JavaScript file as an example and make changes there.

`index.js`
```
alert("Hello from the main branch!")
```

Then run the following commands to push the code to your repository:

```
git add . // this will stage the changes you have made to your file
```
```
git commit -m "Made my first changes on the main branch"
```
```
git push
```

### Checkout to a new branch and make more changes there

Let's now checkout to the branch that will create the conflict on `merge`:

```
git checkout -b new-branch
```

`index.js`

```
alert("Hello from the new branch!")
alert("I will create a merge conflict.")
```

Then, git add, commit and push.

### Checkout to the main branch and make new changes there

After creating the new branch where we made the changes to the file, let's checkout back to the `main` branch:

```
git checkout main
```

`index.js`
```
alert("Hello from the main branch!")
alert("Now I have made a conflict!")
```

Then, git add, commit and push.

### Merge the new-branch

In order to create the merge conflict, run the following command:

```
git merge new-branch
```

### 💥 Boom: merge conflict 

Now that you have tried to merge, you should get something similar to this warning telling you that you have a merge conflict:


![merge conflict warning](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xh7j10le1cnjrttfnfnp.png)

### 🧰 How do you resolve a merge conflict?

![stay calm](https://media.tenor.com/CXoREuuCPNcAAAAM/beaker-muppets.gif)

Now that we have a merge conflict and before we freak out to the point of calling the ambulance 🚨, you can either `git merge --abort` 🙈 or resolve the merge conflict 😎 We will go with the last one. In order to resolve a merge conflict, you can either make use of the options on top of the code in the screenshot from the previous section (`Accept Current Change`, `Accept Incoming Change`, `Accept Both Changes`, `Compare Changes`), or choose the changes manually. Let's make some changes and get rid of the strange merge conflict stuff:

`index.js`
```
alert("Hello from the main branch!")
alert("I will create a merge conflict!")
```

Now, run git add, commit and push the code. Then, run git status to confirm whether the conflict has been resolved. 

![seinfeld celebrating](https://mavsocial.com/wp-content/uploads/2017/09/giphy.gif)

You should have been able to resolve the merge conflict now 👏

## 📚 Further reading

Here are some resources I would recommend you checking out in order to get more in depth with merge conflicts. 

- https://www.atlassian.com/git/tutorials/using-branches/merge-conflicts

It is also recommended to practice by creating git repositories and trying to merge branches to get more used to resolving merge conflicts.

### 👋 Thank you for reading 

Thank you very much for reading this article! I hope it was helpful and I look forward to your thoughts on the comments and to seeing you in my next article!😉