Documentation / git-merge.txton commit wrapper.c: add and use fopen_or_warn() (e9d983f)
   1git-merge(1)
   2============
   3
   4NAME
   5----
   6git-merge - Join two or more development histories together
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git merge' [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
  13        [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
  14        [--[no-]allow-unrelated-histories]
  15        [--[no-]rerere-autoupdate] [-m <msg>] [<commit>...]
  16'git merge' --abort
  17'git merge' --continue
  18
  19DESCRIPTION
  20-----------
  21Incorporates changes from the named commits (since the time their
  22histories diverged from the current branch) into the current
  23branch.  This command is used by 'git pull' to incorporate changes
  24from another repository and can be used by hand to merge changes
  25from one branch into another.
  26
  27Assume the following history exists and the current branch is
  28"`master`":
  29
  30------------
  31          A---B---C topic
  32         /
  33    D---E---F---G master
  34------------
  35
  36Then "`git merge topic`" will replay the changes made on the
  37`topic` branch since it diverged from `master` (i.e., `E`) until
  38its current commit (`C`) on top of `master`, and record the result
  39in a new commit along with the names of the two parent commits and
  40a log message from the user describing the changes.
  41
  42------------
  43          A---B---C topic
  44         /         \
  45    D---E---F---G---H master
  46------------
  47
  48The second syntax ("`git merge --abort`") can only be run after the
  49merge has resulted in conflicts. 'git merge --abort' will abort the
  50merge process and try to reconstruct the pre-merge state. However,
  51if there were uncommitted changes when the merge started (and
  52especially if those changes were further modified after the merge
  53was started), 'git merge --abort' will in some cases be unable to
  54reconstruct the original (pre-merge) changes. Therefore:
  55
  56*Warning*: Running 'git merge' with non-trivial uncommitted changes is
  57discouraged: while possible, it may leave you in a state that is hard to
  58back out of in the case of a conflict.
  59
  60The fourth syntax ("`git merge --continue`") can only be run after the
  61merge has resulted in conflicts.
  62
  63OPTIONS
  64-------
  65include::merge-options.txt[]
  66
  67-S[<keyid>]::
  68--gpg-sign[=<keyid>]::
  69        GPG-sign the resulting merge commit. The `keyid` argument is
  70        optional and defaults to the committer identity; if specified,
  71        it must be stuck to the option without a space.
  72
  73-m <msg>::
  74        Set the commit message to be used for the merge commit (in
  75        case one is created).
  76+
  77If `--log` is specified, a shortlog of the commits being merged
  78will be appended to the specified message.
  79+
  80The 'git fmt-merge-msg' command can be
  81used to give a good default for automated 'git merge'
  82invocations. The automated message can include the branch description.
  83
  84--[no-]rerere-autoupdate::
  85        Allow the rerere mechanism to update the index with the
  86        result of auto-conflict resolution if possible.
  87
  88--abort::
  89        Abort the current conflict resolution process, and
  90        try to reconstruct the pre-merge state.
  91+
  92If there were uncommitted worktree changes present when the merge
  93started, 'git merge --abort' will in some cases be unable to
  94reconstruct these changes. It is therefore recommended to always
  95commit or stash your changes before running 'git merge'.
  96+
  97'git merge --abort' is equivalent to 'git reset --merge' when
  98`MERGE_HEAD` is present.
  99
 100--continue::
 101        After a 'git merge' stops due to conflicts you can conclude the
 102        merge by running 'git merge --continue' (see "HOW TO RESOLVE
 103        CONFLICTS" section below).
 104
 105<commit>...::
 106        Commits, usually other branch heads, to merge into our branch.
 107        Specifying more than one commit will create a merge with
 108        more than two parents (affectionately called an Octopus merge).
 109+
 110If no commit is given from the command line, merge the remote-tracking
 111branches that the current branch is configured to use as its upstream.
 112See also the configuration section of this manual page.
 113+
 114When `FETCH_HEAD` (and no other commit) is specified, the branches
 115recorded in the `.git/FETCH_HEAD` file by the previous invocation
 116of `git fetch` for merging are merged to the current branch.
 117
 118
 119PRE-MERGE CHECKS
 120----------------
 121
 122Before applying outside changes, you should get your own work in
 123good shape and committed locally, so it will not be clobbered if
 124there are conflicts.  See also linkgit:git-stash[1].
 125'git pull' and 'git merge' will stop without doing anything when
 126local uncommitted changes overlap with files that 'git pull'/'git
 127merge' may need to update.
 128
 129To avoid recording unrelated changes in the merge commit,
 130'git pull' and 'git merge' will also abort if there are any changes
 131registered in the index relative to the `HEAD` commit.  (One
 132exception is when the changed index entries are in the state that
 133would result from the merge already.)
 134
 135If all named commits are already ancestors of `HEAD`, 'git merge'
 136will exit early with the message "Already up-to-date."
 137
 138FAST-FORWARD MERGE
 139------------------
 140
 141Often the current branch head is an ancestor of the named commit.
 142This is the most common case especially when invoked from 'git
 143pull': you are tracking an upstream repository, you have committed
 144no local changes, and now you want to update to a newer upstream
 145revision.  In this case, a new commit is not needed to store the
 146combined history; instead, the `HEAD` (along with the index) is
 147updated to point at the named commit, without creating an extra
 148merge commit.
 149
 150This behavior can be suppressed with the `--no-ff` option.
 151
 152TRUE MERGE
 153----------
 154
 155Except in a fast-forward merge (see above), the branches to be
 156merged must be tied together by a merge commit that has both of them
 157as its parents.
 158
 159A merged version reconciling the changes from all branches to be
 160merged is committed, and your `HEAD`, index, and working tree are
 161updated to it.  It is possible to have modifications in the working
 162tree as long as they do not overlap; the update will preserve them.
 163
 164When it is not obvious how to reconcile the changes, the following
 165happens:
 166
 1671. The `HEAD` pointer stays the same.
 1682. The `MERGE_HEAD` ref is set to point to the other branch head.
 1693. Paths that merged cleanly are updated both in the index file and
 170   in your working tree.
 1714. For conflicting paths, the index file records up to three
 172   versions: stage 1 stores the version from the common ancestor,
 173   stage 2 from `HEAD`, and stage 3 from `MERGE_HEAD` (you
 174   can inspect the stages with `git ls-files -u`).  The working
 175   tree files contain the result of the "merge" program; i.e. 3-way
 176   merge results with familiar conflict markers `<<<` `===` `>>>`.
 1775. No other changes are made.  In particular, the local
 178   modifications you had before you started merge will stay the
 179   same and the index entries for them stay as they were,
 180   i.e. matching `HEAD`.
 181
 182If you tried a merge which resulted in complex conflicts and
 183want to start over, you can recover with `git merge --abort`.
 184
 185MERGING TAG
 186-----------
 187
 188When merging an annotated (and possibly signed) tag, Git always
 189creates a merge commit even if a fast-forward merge is possible, and
 190the commit message template is prepared with the tag message.
 191Additionally, if the tag is signed, the signature check is reported
 192as a comment in the message template. See also linkgit:git-tag[1].
 193
 194When you want to just integrate with the work leading to the commit
 195that happens to be tagged, e.g. synchronizing with an upstream
 196release point, you may not want to make an unnecessary merge commit.
 197
 198In such a case, you can "unwrap" the tag yourself before feeding it
 199to `git merge`, or pass `--ff-only` when you do not have any work on
 200your own. e.g.
 201
 202----
 203git fetch origin
 204git merge v1.2.3^0
 205git merge --ff-only v1.2.3
 206----
 207
 208
 209HOW CONFLICTS ARE PRESENTED
 210---------------------------
 211
 212During a merge, the working tree files are updated to reflect the result
 213of the merge.  Among the changes made to the common ancestor's version,
 214non-overlapping ones (that is, you changed an area of the file while the
 215other side left that area intact, or vice versa) are incorporated in the
 216final result verbatim.  When both sides made changes to the same area,
 217however, Git cannot randomly pick one side over the other, and asks you to
 218resolve it by leaving what both sides did to that area.
 219
 220By default, Git uses the same style as the one used by the "merge" program
 221from the RCS suite to present such a conflicted hunk, like this:
 222
 223------------
 224Here are lines that are either unchanged from the common
 225ancestor, or cleanly resolved because only one side changed.
 226<<<<<<< yours:sample.txt
 227Conflict resolution is hard;
 228let's go shopping.
 229=======
 230Git makes conflict resolution easy.
 231>>>>>>> theirs:sample.txt
 232And here is another line that is cleanly resolved or unmodified.
 233------------
 234
 235The area where a pair of conflicting changes happened is marked with markers
 236`<<<<<<<`, `=======`, and `>>>>>>>`.  The part before the `=======`
 237is typically your side, and the part afterwards is typically their side.
 238
 239The default format does not show what the original said in the conflicting
 240area.  You cannot tell how many lines are deleted and replaced with
 241Barbie's remark on your side.  The only thing you can tell is that your
 242side wants to say it is hard and you'd prefer to go shopping, while the
 243other side wants to claim it is easy.
 244
 245An alternative style can be used by setting the "merge.conflictStyle"
 246configuration variable to "diff3".  In "diff3" style, the above conflict
 247may look like this:
 248
 249------------
 250Here are lines that are either unchanged from the common
 251ancestor, or cleanly resolved because only one side changed.
 252<<<<<<< yours:sample.txt
 253Conflict resolution is hard;
 254let's go shopping.
 255|||||||
 256Conflict resolution is hard.
 257=======
 258Git makes conflict resolution easy.
 259>>>>>>> theirs:sample.txt
 260And here is another line that is cleanly resolved or unmodified.
 261------------
 262
 263In addition to the `<<<<<<<`, `=======`, and `>>>>>>>` markers, it uses
 264another `|||||||` marker that is followed by the original text.  You can
 265tell that the original just stated a fact, and your side simply gave in to
 266that statement and gave up, while the other side tried to have a more
 267positive attitude.  You can sometimes come up with a better resolution by
 268viewing the original.
 269
 270
 271HOW TO RESOLVE CONFLICTS
 272------------------------
 273
 274After seeing a conflict, you can do two things:
 275
 276 * Decide not to merge.  The only clean-ups you need are to reset
 277   the index file to the `HEAD` commit to reverse 2. and to clean
 278   up working tree changes made by 2. and 3.; `git merge --abort`
 279   can be used for this.
 280
 281 * Resolve the conflicts.  Git will mark the conflicts in
 282   the working tree.  Edit the files into shape and
 283   'git add' them to the index.  Use 'git commit' to seal the deal.
 284
 285You can work through the conflict with a number of tools:
 286
 287 * Use a mergetool.  `git mergetool` to launch a graphical
 288   mergetool which will work you through the merge.
 289
 290 * Look at the diffs.  `git diff` will show a three-way diff,
 291   highlighting changes from both the `HEAD` and `MERGE_HEAD`
 292   versions.
 293
 294 * Look at the diffs from each branch. `git log --merge -p <path>`
 295   will show diffs first for the `HEAD` version and then the
 296   `MERGE_HEAD` version.
 297
 298 * Look at the originals.  `git show :1:filename` shows the
 299   common ancestor, `git show :2:filename` shows the `HEAD`
 300   version, and `git show :3:filename` shows the `MERGE_HEAD`
 301   version.
 302
 303
 304EXAMPLES
 305--------
 306
 307* Merge branches `fixes` and `enhancements` on top of
 308  the current branch, making an octopus merge:
 309+
 310------------------------------------------------
 311$ git merge fixes enhancements
 312------------------------------------------------
 313
 314* Merge branch `obsolete` into the current branch, using `ours`
 315  merge strategy:
 316+
 317------------------------------------------------
 318$ git merge -s ours obsolete
 319------------------------------------------------
 320
 321* Merge branch `maint` into the current branch, but do not make
 322  a new commit automatically:
 323+
 324------------------------------------------------
 325$ git merge --no-commit maint
 326------------------------------------------------
 327+
 328This can be used when you want to include further changes to the
 329merge, or want to write your own merge commit message.
 330+
 331You should refrain from abusing this option to sneak substantial
 332changes into a merge commit.  Small fixups like bumping
 333release/version name would be acceptable.
 334
 335
 336include::merge-strategies.txt[]
 337
 338CONFIGURATION
 339-------------
 340include::merge-config.txt[]
 341
 342branch.<name>.mergeOptions::
 343        Sets default options for merging into branch <name>. The syntax and
 344        supported options are the same as those of 'git merge', but option
 345        values containing whitespace characters are currently not supported.
 346
 347SEE ALSO
 348--------
 349linkgit:git-fmt-merge-msg[1], linkgit:git-pull[1],
 350linkgit:gitattributes[5],
 351linkgit:git-reset[1],
 352linkgit:git-diff[1], linkgit:git-ls-files[1],
 353linkgit:git-add[1], linkgit:git-rm[1],
 354linkgit:git-mergetool[1]
 355
 356GIT
 357---
 358Part of the linkgit:git[1] suite