I've only just started to use GIT and think its wonderful, however I'm a little confused over what the merge command does.
Let us say we have a working project in the branch "A".
I go home and make changes to this branch and save it as "B". Another programmer makes changes to "A" and saves it as "C".
Is there a way to merge the two branches "B" and "C" together, then commit the changes as a new branch, say "D"?
Or am missing the point of 'merge'?
33 Answers
merge is used to bring two (or more) branches together.
a little example:
# on branch A: # create new branch B $ git checkout -b B # hack hack $ git commit -am "commit on branch B" # create new branch C from A $ git checkout -b C A # hack hack $ git commit -am "commit on branch C" # go back to branch A $ git checkout A # hack hack $ git commit -am "commit on branch A" so now there are three separate branches (namely A B and C) with different heads
to get the changes from B and C back to A, checkout A (already done in this example) and then use the merge command:
# create an octopus merge $ git merge B C your history will then look something like this:
…-o-o-x-------A |\ /| | B---/ | \ / C---/ if you want to merge across repository/computer borders, have a look at git pull command, e.g. from the pc with branch A (this example will create two new commits):
# pull branch B $ git pull ssh://host/… B # pull branch C $ git pull ssh://host/… C 6If you want to merge changes in SubBranch to MainBranch
- you should be on MainBranch
git checkout MainBranch - then run merge command
git merge SubBranch
Case: If you need to ignore the merge commit created by default, follow these steps.
Say, a new feature branch is checked out from master having 2 commits already,
- "Added A" , "Added B"
Checkout a new feature_branch
- "Added C" , "Added D"
Feature branch then adds two commits-->
- "Added E", "Added F"
Now if you want to merge feature_branch changes to master, Do git merge feature_branch sitting on the master.
This will add all commits into master branch (4 in master + 2 in feature_branch = total 6) + an extra merge commit something like 'Merge branch 'feature_branch'' as the master is diverged.
If you really need to ignore these commits (those made in FB) and add the whole changes made in feature_branch as a single commit like 'Integrated feature branch changes into master', Run git merge feature_merge --no-commit.
With --no-commit, it perform the merge and stop just before creating a merge commit, We will have all the added changes in feature branch now in master and get a chance to create a new commit as our own.
