git-merge(1)
============

NAME
----
git-merge - Join two or more development histories together


SYNOPSIS
--------
[verse]
'git merge' [-n] [--stat] [--no-commit] [--squash] [-s <strategy>]...
	[-m <msg>] <remote> <remote>...
'git merge' <msg> HEAD <remote>...

DESCRIPTION
-----------
This is the top-level interface to the merge machinery
which drives multiple merge strategy scripts.

The second syntax (<msg> `HEAD` <remote>) is supported for
historical reasons.  Do not use it from the command line or in
new scripts.  It is the same as `git merge -m <msg> <remote>`.


OPTIONS
-------
include::merge-options.txt[]

-m <msg>::
	The commit message to be used for the merge commit (in case
	it is created). The 'git-fmt-merge-msg' script can be used
	to give a good default for automated 'git-merge' invocations.

<remote>...::
	Other branch heads to merge into our branch.  You need at
	least one <remote>.  Specifying more than one <remote>
	obviously means you are trying an Octopus.

include::merge-strategies.txt[]


If you tried a merge which resulted in a complex conflicts and
would want to start over, you can recover with 'git-reset'.

CONFIGURATION
-------------
include::merge-config.txt[]

branch.<name>.mergeoptions::
	Sets default options for merging into branch <name>. The syntax and
	supported options are equal to that of 'git-merge', but option values
	containing whitespace characters are currently not supported.

HOW MERGE WORKS
---------------

A merge is always between the current `HEAD` and one or more
commits (usually, branch head or tag), and the index file must
match the tree of `HEAD` commit (i.e. the contents of the last commit)
when it starts out.  In other words, `git diff --cached HEAD` must
report no changes.  (One exception is when the changed index
entries are already in the same state that would result from
the merge anyway.)

Three kinds of merge can happen:

* The merged commit is already contained in `HEAD`. This is the
  simplest case, called "Already up-to-date."

* `HEAD` is already contained in the merged commit. This is the
  most common case especially when involved through 'git pull':
  you are tracking an upstream repository, committed no local
  changes and now you want to update to a newer upstream revision.
  Your `HEAD` (and the index) is updated to at point the merged
  commit, without creating an extra merge commit.  This is
  called "Fast-forward".

* Both the merged commit and `HEAD` are independent and must be
  tied together by a merge commit that has them both as its parents.
  The rest of this section describes this "True merge" case.

The chosen merge strategy merges the two commits into a single
new source tree.
When things cleanly merge, these things happen:

1. The results are updated both in the index file and in your
   working tree;
2. Index file is written out as a tree;
3. The tree gets committed; and
4. The `HEAD` pointer gets advanced.

Because of 2., we require that the original state of the index
file to match exactly the current `HEAD` commit; otherwise we
will write out your local changes already registered in your
index file along with the merge result, which is not good.
Because 1. involves only the paths different between your
branch and the remote branch you are pulling from during the
merge (which is typically a fraction of the whole tree), you can
have local modifications in your working tree as long as they do
not overlap with what the merge updates.

When there are conflicts, these things happen:

1. `HEAD` stays the same.

2. Cleanly merged paths are updated both in the index file and
   in your working tree.

3. For conflicting paths, the index file records up to three
   versions; stage1 stores the version from the common ancestor,
   stage2 from `HEAD`, and stage3 from the remote branch (you
   can inspect the stages with `git ls-files -u`).  The working
   tree files have the result of "merge" program; i.e. 3-way
   merge result with familiar conflict markers `<<< === >>>`.

4. No other changes are done.  In particular, the local
   modifications you had before you started merge will stay the
   same and the index entries for them stay as they were,
   i.e. matching `HEAD`.

After seeing a conflict, you can do two things:

 * Decide not to merge.  The only clean-up you need are to reset
   the index file to the `HEAD` commit to reverse 2. and to clean
   up working tree changes made by 2. and 3.; 'git-reset --hard' can
   be used for this.

 * Resolve the conflicts.  `git diff` would report only the
   conflicting paths because of the above 2. and 3.
   Edit the working tree files into a desirable shape
   ('git mergetool' can ease this task), 'git-add' or 'git-rm'
   them, to make the index file contain what the merge result
   should be, and run 'git-commit' to commit the result.


SEE ALSO
--------
linkgit:git-fmt-merge-msg[1], linkgit:git-pull[1],
linkgit:gitattributes[5],
linkgit:git-reset[1],
linkgit:git-diff[1], linkgit:git-ls-files[1],
linkgit:git-add[1], linkgit:git-rm[1],
linkgit:git-mergetool[1]

Author
------
Written by Junio C Hamano <gitster@pobox.com>


Documentation
--------------
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.

GIT
---
Part of the linkgit:git[1] suite
