Bitbucket: Conflict in remote repo, can't figure out how to resolve

Siraris picture Siraris · Jan 8, 2014 · Viewed 10.4k times · Source

I hope I can express this properly... I have the following setup in Bitbucket (using Git protocol). I have a master repo that contains my application. I then fork the master repo per client in order to have the flexibility to make client specific changes without affecting the master. When a generic change is required, I push to master, and then sync with the fork and then do a pull into production.

The issue I'm having is that in Bitbucket, it's saying I have merge conflicts, but I have no clue how to resolve them. Locally, I have no conflicts. When I go into Bitbucket, it tells me I'm 2 commits behind the master repo so I click sync. It says there's merge conflicts, and I need to resolve them. I then see no way to resolve these conflicts. If I do a pull on the production server, it says there's conflicts and I need to resolve them, so I do. I go in with nano (as I HATE VIM) and clean out what I need to, and go about my business. But yet the forked repo seems to still be in conflict. I have no clue what I need to do in order to resolve this situation. Regardless, it has me at a standstill because I can't push any more changes to the fork until the conflicts get resolved.

Answer

Chris picture Chris · Jan 8, 2014

When working with a fork, it is often helpful to have the upstream repository (your Master repository) configured as a remote as well as the fork (your Client A repository). For example, you probably already have an origin that represents the fork.

Add a new remote upstream to represent the "Master" repository:

git remote add upstream [email protected]:user/master-repo.git
git fetch upstream

Now you should be able to see all of the relevant branches. For instance, if you're trying to merge the master branch, these will be relevant:

  • master (local)
  • origin/master (Client A)
  • upstream/master (Master repo)

If you visualize these branches with gitk or git log --all --graph --decorate you will probably be able to see where the conflict is coming from. Most likely you will want to merge changes from both remotes into your local master branch:

git checkout master
git merge upstream/master  # (Merge changes from the "Master" repo)
# Fix any merge conflicts that may arise
git merge origin/master    # (Merge changes from the Client A repo)
# Fix any merge conflicts that may arise

Once you have done this, you should be able to push cleanly to origin:

git push origin master