Keeping your commits in the separate context of a branch is a huge help. But there will come a time when you want to integrate changes from one branch into another. For example when you finished developing a feature and want to integrate it into your "production" branch. Or maybe the other way around: you're not yet finished working on your feature, but so many things have happened in the rest of the project in the meantime that you want to integrate these back into your feature branch.
Whatever the scenario may be: such an integration is called "merging" and is done with the "git merge" command.
Integrating Branches - Not Individual Commits
When starting a merge, you don't have to (and cannot) pick individual commits that shall be integrated. Instead, you tell Git which branch you want to integrate - and Git will figure out which commits you don't have in your current working branch. Only these commits will then be integrated as a result.
Also, you never have to think long and hard about where these changes end up: The target of such an integration is always your current HEAD branch and, thereby, your working copy.
In Git, performing a merge is easy as pie. It requires just two steps:
- (1) Check out the branch that should receive the changes.
- (2) Call the "git merge" command with the name of the branch that contains the desired changes.
Let's integrate the changes from our "contact-form" branch into "master":
$ git checkout master $ git merge contact-form
When you now perform a "git log" command, you'll see that our "Add new contact form page" commit was successfully integrated into master!
$ git log commit 56eddd14cf034f4bcb8dc9cbf847b33309fa5180 Author: Tobias Günther <firstname.lastname@example.org> Date: Fri Jul 26 10:56:16 2013 +0200 Add new contact form page commit 2dfe283e6c81ca48d6edc1574b1f2d4d84ae7f1 Author: Tobias Günther <email@example.com> Date: Fri Jul 26 10:52:04 2013 +0200 Implement the new login box commit 2b504bee4083a20e0ef1e037eea0bd913a4d56b6 Author: Tobias Günther <firstname.lastname@example.org> Date: Fri Jul 26 10:05:48 2013 +0200 Change headlines for about and imprint
However, the result of a merge action can't always be displayed that clearly: not always can Git simply add the missing commits on top of the HEAD branch. Often, it will have to combine changes in a new, separate commit called a "merge commit". Think of it like a knot that connects two branches.
You can merge one branch into another as often as you like. Git will again figure out which changes haven't been merged and only consider these.
In some situations, merging will result in one or more "merge conflicts". In such a case, Git wasn't able to combine changes, e.g. because the exact same line was modified in two different ways. You'll then have to decide yourself which content you want. We'll talk about dealing with merge conflicts in detail later in this book.