When does git pull cause merge between multiple branches?
I’m trying to understand the circumstances that caused git to merge a feature branch I was working on into the main develop branch after switching to the develop branch.
I was able to revert the merge but it took the better part of a day to fully resolve and I’d like to avoid it in the future.
Here is the workflow:
After working on my feature branch I need to work on a bug fix.
My feature branch (refs/heads/feature/uploader/90) has been kept up with the main develop branch with:
git merge origin/develop
Then I need to switch to the develop branch:
git checkout develop
Switched to branch ‘develop’
Your branch is behind ‘origin/develop’ by 88 commits, and can be fast-forwarded.
Then when I issue a pull:
git pull origin refs/heads/develop
For some reason it looks like git has decided to merge my feature branch into develop, the output looks like this:
branch develop -> FETCH_HEAD Fast-forwarding to: 102301bcc51fc6d7978e5287df9d031d82e53bc9 Trying simple merge with d139bab0a96df01408f82110e38b6e0b6b98e6e6 Merge made by the 'octopus' strategy.
And my commit log shows me committing:
Merge branches ‘feature/uploader/90’ and ‘develop’ of github.com:MakerStudios/dashboard into develop
One Solution collect form web for “When does git pull cause merge between multiple branches?”
This is what is known as a fast-forward merge.
It happens (by default) any time you do a merge where all the changes in the branch on which you reside are already present in the branch you’re trying to merge in.
So, since in your above example
refs/heads/feature/uploader/90 already contained all the changes in
refs/heads/develop, instead of creating a true merge commit,
git just moved the ref
develop to point to the same commit as
You can avoid this behavior by doing
git merge --no-ff, which will not fast-forward, or changing the
merge.ff property to
Undoing an undesired fast-forward merge is not as difficult as you make it out to be: just
git reset --hard to the last commit before the stuff which came in on the merge.