I have a git repository with master
and alt
branches. alt
branch contains modified version of master
code, and i am trying to merge changes from master
to alt
like this:
git merge --squash master
Merge results in conflict:
Auto-merging myproject/foo/bar
CONFLICT (content): Merge conflict in myproject/foo/bar
Squash commit -- not updating HEAD
Automatic merge failed; fix conflicts and then commit the result.
After I resolve conflicts and commit changes everything seems fine, but when i run git merge --squash master
again (without doing any changes on any branches) i will get same conflict error.
Why is that? What did i miss?
By squash
ing the merge, you've created a commit which has the effect of, but is not really, a merge.
That is, the working tree has the modifications you'd expect, but the metadata doesn't: crucially, the commit doesn't have two parents (one on master
and one on alt
) and therefore subsequent merges can't figure out the last common ancestor.
squash
master
. I'll accumulate any useful information into the squashed commit, but specifically don't want this feature's incremental development history polluting the master
commit timeline.rebase -i
to squash their commits, but this is easiersquash
Any merge where you want to keep the history and ancestry metadata intact, such as any time you want repeated recursive merges to work correctly, specifically what the OP is trying to do.
squash
just isn't really a good default, which is why it isn't the default.