I have a remote Git server, here is the scenario which I want to perform:
For each bug/feature I create a different Git branch
I keep on committing my code in that Git branch with un-official Git messages
In top repository we have to do one commit for one bug with official Git message
So how can I merge my branch to remote branch so that they get just one commit for all my check-ins (I even want to provide commit message for this)?
You want to merge with the squash option. That's if you want to do it one branch at a time.
If you want to merge all the branches at the same time as single commits, then first rebase interactively and squash each feature then octopus merge:
Squash into one commit then repeat for the other features.
That last merge is an "octopus merge" because it's merging a lot of branches at once.
Hope this helps
For Git
Create a new feature
via Terminal/Shell:
This doesnt commit it, allows you to review it first.
Then commit, and finish feature from this new branch, and delete/ignore the old one (the one you did dev on).
Merge
newFeature
branch intomaster
with a custom commit:If instead, you do
git merge --squash newFeature && git commit
you will get a commit message that will include all the
newFeature
branch commits, which you can customize.Say your bug fix branch is called
bugfix
and you want to merge it intomaster
:This will take all the commits from the
bugfix
branch, squash them into 1 commit, and merge it with yourmaster
branch.Explanation:
Switches to your
master
branch.Takes all the commits from the
bugfix
branch and merges it with your current branch.Creates a single commit from the merged changes.
Omitting the
-m
parameter lets you modify a draft commit message containing every message from your squashed commits before finalizing your commit.Suppose you worked in feature/task1 with multiple comments
What finally cleared this up for me was a comment showing that:
is the equivalent of doing:
When I want to merge a feature branch with 105(!!) commits and have them all squashed into one, I don't want to
git rebase -i origin/master
because I need to separately resolve merge conflicts for each of the intermediate commits (or at least the ones which git can't figure out itself). Usinggit merge --squash
gets me the result I want, of a single commit for merging an entire feature branch. And, I only need to do at most one manual conflict resolution.