How to fix conflicts on protected branches - GEOS-ESM/MAPL GitHub Wiki
Every so often, there will be conflicts. An example is in Pull Request #27. This was trying to merge master into develop to keep things in sync. But Github noted three conflicts in:
MAPL_Base/MAPL_Generic.F90
MAPL_Base/MAPL_HistoryGridComp.F90
MAPL_Base/MAPL_LocStreamMod.F90
If these branches weren't protected, you could fix the conflict in browser; we cannot, though. Now Github will provide some instructions:
Step 1: From your project repository, bring in the changes and test.
git fetch origin git checkout -b master origin/master git merge developStep 2: Merge the changes and update on GitHub.
git checkout develop git merge --no-ff master git push origin develop
but these instructions are a bit terse. They miss some things you might forget to do. So here is a more explicit procedure to do this using this as an example.
First we get the code and make sure we have the two branches we want (master and develop) locally.
$ git clone [email protected]:GEOS-ESM/MAPL.git
$ cd MAPL
$ git checkout master
$ git checkout develop
Now you have what you want locally.
This is the step that is kind of weird at first. We want to merge master into develop. But we need to start from the other direction. First, make sure you're on master:
$ git checkout masterNow do the merge like Github suggests:
$ git merge develop
Auto-merging MAPL_Base/MAPL_LocStreamMod.F90
CONFLICT (content): Merge conflict in MAPL_Base/MAPL_LocStreamMod.F90
Auto-merging MAPL_Base/MAPL_HistoryGridComp.F90
CONFLICT (content): Merge conflict in MAPL_Base/MAPL_HistoryGridComp.F90
Auto-merging MAPL_Base/MAPL_Generic.F90
CONFLICT (content): Merge conflict in MAPL_Base/MAPL_Generic.F90
Removing GMAO_pFIO/tests/test_SimpleSocket.pf
Removing GMAO_pFIO/SimpleServer.F90
Removing GMAO_pFIO/SimpleDirectoryService.F90
Removing GMAO_pFIO/RequestIdMessage.F90
Removing GMAO_pFIO/MessageQueue.F90
Removing GMAO_pFIO/MemReference.F90
Removing GMAO_pFIO/CollectionIdMessage.F90
Removing GMAO_pFIO/AddCollectionMessage.F90
Automatic merge failed; fix conflicts and then commit the result.And as Github reported we have three conflicts. If you do git status, you'll see these as both modified:
modified: Tests/ExtDataDriverGridComp.F90
modified: Tests/ExtDataDriverMod.F90
modified: Tests/ExtDataRoot_GridComp.F90
modified: Tests/VarspecDescription.F90
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: MAPL_Base/MAPL_Generic.F90
both modified: MAPL_Base/MAPL_HistoryGridComp.F90
both modified: MAPL_Base/MAPL_LocStreamMod.F90
Now you need to edit these files and fix them and add them. Look for the <<<<< style conflict markers in your editor.
$ vim MAPL_Base/MAPL_Generic.F90
$ git add MAPL_Base/MAPL_Generic.F90
Edit and git add all the files. Once you are done, commit:
$ git commit
And the editor will have a default message. I usually just keep it, but add more if you like.
Now we do the other direction following the Github advice:
$ git checkout develop
$ git merge --no-ff master
Again, an editor will popup. Once you write that, a git status will show some updates for develop:
$ git status
On branch develop
Your branch is ahead of 'origin/develop' by 6 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
Now if we are being good, this should have maybe 2 or 3 commits. 6 commits shows we probably haven't been merging master into develop as we should as a hotfix is usually not a series of commits. 👎
Now Github says to just push develop to origin but because develop is a protected branch we can't do that. So make a new branch:
$ git checkout -b merge/mathomp4/handmerge-master-to-develop-2019Aug28
and push that up to github:
$ git push -u origin merge/mathomp4/handmerge-master-to-develop-2019Aug28
and then that is the branch that needs have a pull request into develop!
Confusing, but there you go.