blob: e4f3352eb584539b75235fc304431646df9415f4 [file] [log] [blame]
Junio C Hamano1a4e8412005-12-27 08:17:231git-merge(1)
2============
3
4NAME
5----
Junio C Hamano7c73c662007-01-19 00:37:506git-merge - Join two or more development histories together
Junio C Hamano1a4e8412005-12-27 08:17:237
8
9SYNOPSIS
10--------
Junio C Hamanoee6d9612006-11-27 20:03:2211[verse]
Junio C Hamano795a5a32012-02-02 01:36:3712'git merge' [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
Junio C Hamanocb705392019-09-18 19:30:0113[--no-verify] [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
Junio C Hamano7921e7c2016-04-29 21:55:0914[--[no-]allow-unrelated-histories]
Junio C Hamanof09b7cd2018-08-02 23:01:4515[--[no-]rerere-autoupdate] [-m <msg>] [-F <file>] [<commit>...]
Junio C Hamanoc9f11c22019-07-10 02:54:0416'git merge' (--continue | --abort | --quit)
Junio C Hamano1a4e8412005-12-27 08:17:2317
18DESCRIPTION
19-----------
Junio C Hamanod0d892c2010-01-24 20:06:2920Incorporates changes from the named commits (since the time their
21histories diverged from the current branch) into the current
22branch. This command is used by 'git pull' to incorporate changes
23from another repository and can be used by hand to merge changes
24from one branch into another.
25
26Assume the following history exists and the current branch is
27"`master`":
28
29------------
30 A---B---C topic
31 /
32 D---E---F---G master
33------------
34
35Then "`git merge topic`" will replay the changes made on the
36`topic` branch since it diverged from `master` (i.e., `E`) until
37its current commit (`C`) on top of `master`, and record the result
38in a new commit along with the names of the two parent commits and
39a log message from the user describing the changes.
40
41------------
42 A---B---C topic
43 / \
44 D---E---F---G---H master
45------------
Junio C Hamano1a4e8412005-12-27 08:17:2346
Junio C Hamanodc8d0c32017-03-30 23:00:2147The second syntax ("`git merge --abort`") can only be run after the
Junio C Hamano788eeba2010-12-08 22:50:4348merge has resulted in conflicts. 'git merge --abort' will abort the
49merge process and try to reconstruct the pre-merge state. However,
50if there were uncommitted changes when the merge started (and
51especially if those changes were further modified after the merge
52was started), 'git merge --abort' will in some cases be unable to
53reconstruct the original (pre-merge) changes. Therefore:
54
Junio C Hamano3a3357e2013-06-26 23:20:5655*Warning*: Running 'git merge' with non-trivial uncommitted changes is
56discouraged: while possible, it may leave you in a state that is hard to
Junio C Hamano1aa40d22010-01-21 17:46:4357back out of in the case of a conflict.
Junio C Hamano1974bf22007-10-31 05:57:2058
Junio C Hamano14e66832018-06-18 18:32:1959The third syntax ("`git merge --continue`") can only be run after the
Junio C Hamano9e35abf2016-12-27 22:37:2760merge has resulted in conflicts.
Junio C Hamano1a4e8412005-12-27 08:17:2361
62OPTIONS
63-------
Junio C Hamano7a031e52021-08-30 23:54:2564:git-merge: 1
65
Junio C Hamano1a4e8412005-12-27 08:17:2366include::merge-options.txt[]
67
Junio C Hamano1974bf22007-10-31 05:57:2068-m <msg>::
Junio C Hamanoc0e55e72009-10-10 00:56:2969Set the commit message to be used for the merge commit (in
Junio C Hamanof5de4cf2010-06-19 00:33:1770case one is created).
Junio C Hamano68cf15a2010-11-06 01:01:5971+
72If `--log` is specified, a shortlog of the commits being merged
73will be appended to the specified message.
74+
75The 'git fmt-merge-msg' command can be
76used to give a good default for automated 'git merge'
Junio C Hamano7db630e2015-09-17 20:26:2277invocations. The automated message can include the branch description.
Junio C Hamano1a4e8412005-12-27 08:17:2378
Junio C Hamanof09b7cd2018-08-02 23:01:4579-F <file>::
80--file=<file>::
81Read the commit message to be used for the merge commit (in
82case one is created).
83+
84If `--log` is specified, a shortlog of the commits being merged
85will be appended to the specified message.
86
Junio C Hamano6b7d2152019-04-16 12:51:1587--rerere-autoupdate::
88--no-rerere-autoupdate::
Junio C Hamano19107ef2010-01-19 06:20:5989Allow the rerere mechanism to update the index with the
90result of auto-conflict resolution if possible.
91
Junio C Hamanoc9f11c22019-07-10 02:54:0492--overwrite-ignore::
93--no-overwrite-ignore::
94Silently overwrite ignored files from the merge result. This
95is the default behavior. Use `--no-overwrite-ignore` to abort.
96
Junio C Hamano788eeba2010-12-08 22:50:4397--abort::
98Abort the current conflict resolution process, and
Junio C Hamano67cc2b72020-04-30 00:03:2099try to reconstruct the pre-merge state. If an autostash entry is
100present, apply it to the worktree.
Junio C Hamano788eeba2010-12-08 22:50:43101+
102If there were uncommitted worktree changes present when the merge
103started, 'git merge --abort' will in some cases be unable to
104reconstruct these changes. It is therefore recommended to always
105commit or stash your changes before running 'git merge'.
106+
107'git merge --abort' is equivalent to 'git reset --merge' when
Junio C Hamano67cc2b72020-04-30 00:03:20108`MERGE_HEAD` is present unless `MERGE_AUTOSTASH` is also present in
109which case 'git merge --abort' applies the stash entry to the worktree
110whereas 'git reset --merge' will save the stashed changes in the stash
Junio C Hamano2b43cff2020-05-08 22:27:04111list.
Junio C Hamano788eeba2010-12-08 22:50:43112
Junio C Hamano51937872019-06-13 22:09:30113--quit::
114Forget about the current merge in progress. Leave the index
Junio C Hamano67cc2b72020-04-30 00:03:20115and the working tree as-is. If `MERGE_AUTOSTASH` is present, the
Junio C Hamano2b43cff2020-05-08 22:27:04116stash entry will be saved to the stash list.
Junio C Hamano51937872019-06-13 22:09:30117
Junio C Hamano9e35abf2016-12-27 22:37:27118--continue::
119After a 'git merge' stops due to conflicts you can conclude the
120merge by running 'git merge --continue' (see "HOW TO RESOLVE
121CONFLICTS" section below).
122
Junio C Hamano1aa40d22010-01-21 17:46:43123<commit>...::
124Commits, usually other branch heads, to merge into our branch.
Junio C Hamanoa03ac862011-04-02 04:32:29125Specifying more than one commit will create a merge with
126more than two parents (affectionately called an Octopus merge).
127+
Junio C Hamanob051caf2014-06-03 22:15:13128If no commit is given from the command line, merge the remote-tracking
129branches that the current branch is configured to use as its upstream.
Junio C Hamanoa03ac862011-04-02 04:32:29130See also the configuration section of this manual page.
Junio C Hamanoe1b28592015-05-19 21:26:17131+
132When `FETCH_HEAD` (and no other commit) is specified, the branches
133recorded in the `.git/FETCH_HEAD` file by the previous invocation
134of `git fetch` for merging are merged to the current branch.
Junio C Hamano1a4e8412005-12-27 08:17:23135
Junio C Hamano1a4e8412005-12-27 08:17:23136
Junio C Hamanod0d892c2010-01-24 20:06:29137PRE-MERGE CHECKS
138----------------
Junio C Hamano1a4e8412005-12-27 08:17:23139
Junio C Hamanod0d892c2010-01-24 20:06:29140Before applying outside changes, you should get your own work in
141good shape and committed locally, so it will not be clobbered if
142there are conflicts. See also linkgit:git-stash[1].
143'git pull' and 'git merge' will stop without doing anything when
144local uncommitted changes overlap with files that 'git pull'/'git
145merge' may need to update.
Junio C Hamano1a4e8412005-12-27 08:17:23146
Junio C Hamanod0d892c2010-01-24 20:06:29147To avoid recording unrelated changes in the merge commit,
148'git pull' and 'git merge' will also abort if there are any changes
Junio C Hamanof09b7cd2018-08-02 23:01:45149registered in the index relative to the `HEAD` commit. (Special
150narrow exceptions to this rule may exist depending on which merge
151strategy is in use, but generally, the index must match HEAD.)
Junio C Hamano1e6e0062007-07-13 05:33:25152
Junio C Hamanod0d892c2010-01-24 20:06:29153If all named commits are already ancestors of `HEAD`, 'git merge'
Junio C Hamano88bf5712017-09-10 08:39:23154will exit early with the message "Already up to date."
Junio C Hamano1a4e8412005-12-27 08:17:23155
Junio C Hamanod0d892c2010-01-24 20:06:29156FAST-FORWARD MERGE
157------------------
Junio C Hamano1a4e8412005-12-27 08:17:23158
Junio C Hamanod0d892c2010-01-24 20:06:29159Often the current branch head is an ancestor of the named commit.
160This is the most common case especially when invoked from 'git
161pull': you are tracking an upstream repository, you have committed
162no local changes, and now you want to update to a newer upstream
163revision. In this case, a new commit is not needed to store the
164combined history; instead, the `HEAD` (along with the index) is
165updated to point at the named commit, without creating an extra
166merge commit.
Junio C Hamano1a4e8412005-12-27 08:17:23167
Junio C Hamanod0d892c2010-01-24 20:06:29168This behavior can be suppressed with the `--no-ff` option.
Junio C Hamano1a4e8412005-12-27 08:17:23169
Junio C Hamanod0d892c2010-01-24 20:06:29170TRUE MERGE
171----------
Junio C Hamano1a4e8412005-12-27 08:17:23172
Junio C Hamanod0d892c2010-01-24 20:06:29173Except in a fast-forward merge (see above), the branches to be
174merged must be tied together by a merge commit that has both of them
175as its parents.
Junio C Hamano1a4e8412005-12-27 08:17:23176
Junio C Hamanod0d892c2010-01-24 20:06:29177A merged version reconciling the changes from all branches to be
178merged is committed, and your `HEAD`, index, and working tree are
179updated to it. It is possible to have modifications in the working
180tree as long as they do not overlap; the update will preserve them.
Junio C Hamano1a4e8412005-12-27 08:17:23181
Junio C Hamanod0d892c2010-01-24 20:06:29182When it is not obvious how to reconcile the changes, the following
183happens:
Junio C Hamano1a4e8412005-12-27 08:17:23184
Junio C Hamanod0d892c2010-01-24 20:06:291851. The `HEAD` pointer stays the same.
1862. The `MERGE_HEAD` ref is set to point to the other branch head.
1873. Paths that merged cleanly are updated both in the index file and
Junio C Hamano1a4e8412005-12-27 08:17:23188 in your working tree.
Junio C Hamanod0d892c2010-01-24 20:06:291894. For conflicting paths, the index file records up to three
190 versions: stage 1 stores the version from the common ancestor,
191 stage 2 from `HEAD`, and stage 3 from `MERGE_HEAD` (you
Junio C Hamanofce7c7e2008-07-02 03:06:38192 can inspect the stages with `git ls-files -u`). The working
Junio C Hamanoec87f522008-12-10 08:35:25193 tree files contain the result of the "merge" program; i.e. 3-way
Junio C Hamanod0d892c2010-01-24 20:06:29194 merge results with familiar conflict markers `<<<` `===` `>>>`.
1955. No other changes are made. In particular, the local
Junio C Hamano1a4e8412005-12-27 08:17:23196 modifications you had before you started merge will stay the
197 same and the index entries for them stay as they were,
198 i.e. matching `HEAD`.
199
Junio C Hamanod0d892c2010-01-24 20:06:29200If you tried a merge which resulted in complex conflicts and
Junio C Hamano788eeba2010-12-08 22:50:43201want to start over, you can recover with `git merge --abort`.
Junio C Hamanod0d892c2010-01-24 20:06:29202
Junio C Hamano778a3412013-03-28 23:24:30203MERGING TAG
204-----------
205
206When merging an annotated (and possibly signed) tag, Git always
207creates a merge commit even if a fast-forward merge is possible, and
208the commit message template is prepared with the tag message.
209Additionally, if the tag is signed, the signature check is reported
210as a comment in the message template. See also linkgit:git-tag[1].
211
212When you want to just integrate with the work leading to the commit
213that happens to be tagged, e.g. synchronizing with an upstream
214release point, you may not want to make an unnecessary merge commit.
215
216In such a case, you can "unwrap" the tag yourself before feeding it
217to `git merge`, or pass `--ff-only` when you do not have any work on
218your own. e.g.
219
Junio C Hamano91e33952013-09-05 23:42:26220----
Junio C Hamano778a3412013-03-28 23:24:30221git fetch origin
222git merge v1.2.3^0
223git merge --ff-only v1.2.3
Junio C Hamano91e33952013-09-05 23:42:26224----
Junio C Hamano778a3412013-03-28 23:24:30225
226
Junio C Hamanoa476efa2008-10-10 15:31:42227HOW CONFLICTS ARE PRESENTED
228---------------------------
229
230During a merge, the working tree files are updated to reflect the result
231of the merge. Among the changes made to the common ancestor's version,
232non-overlapping ones (that is, you changed an area of the file while the
233other side left that area intact, or vice versa) are incorporated in the
234final result verbatim. When both sides made changes to the same area,
Junio C Hamano076ffcc2013-02-06 05:13:21235however, Git cannot randomly pick one side over the other, and asks you to
Junio C Hamanoa476efa2008-10-10 15:31:42236resolve it by leaving what both sides did to that area.
237
Junio C Hamano076ffcc2013-02-06 05:13:21238By default, Git uses the same style as the one used by the "merge" program
Junio C Hamanoa476efa2008-10-10 15:31:42239from the RCS suite to present such a conflicted hunk, like this:
240
241------------
242Here are lines that are either unchanged from the common
243ancestor, or cleanly resolved because only one side changed.
244<<<<<<< yours:sample.txt
245Conflict resolution is hard;
246let's go shopping.
247=======
248Git makes conflict resolution easy.
249>>>>>>> theirs:sample.txt
250And here is another line that is cleanly resolved or unmodified.
251------------
252
Junio C Hamanoec87f522008-12-10 08:35:25253The area where a pair of conflicting changes happened is marked with markers
Junio C Hamanoea82cff2009-03-18 01:54:48254`<<<<<<<`, `=======`, and `>>>>>>>`. The part before the `=======`
Junio C Hamanoec87f522008-12-10 08:35:25255is typically your side, and the part afterwards is typically their side.
Junio C Hamanoa476efa2008-10-10 15:31:42256
Junio C Hamanoec87f522008-12-10 08:35:25257The default format does not show what the original said in the conflicting
258area. You cannot tell how many lines are deleted and replaced with
259Barbie's remark on your side. The only thing you can tell is that your
Junio C Hamanoa476efa2008-10-10 15:31:42260side wants to say it is hard and you'd prefer to go shopping, while the
261other side wants to claim it is easy.
262
Junio C Hamano322c6242015-03-23 21:32:46263An alternative style can be used by setting the "merge.conflictStyle"
Junio C Hamanoa476efa2008-10-10 15:31:42264configuration variable to "diff3". In "diff3" style, the above conflict
265may look like this:
266
267------------
268Here are lines that are either unchanged from the common
269ancestor, or cleanly resolved because only one side changed.
270<<<<<<< yours:sample.txt
271Conflict resolution is hard;
272let's go shopping.
273|||||||
274Conflict resolution is hard.
275=======
276Git makes conflict resolution easy.
277>>>>>>> theirs:sample.txt
278And here is another line that is cleanly resolved or unmodified.
279------------
280
Junio C Hamanoea82cff2009-03-18 01:54:48281In addition to the `<<<<<<<`, `=======`, and `>>>>>>>` markers, it uses
282another `|||||||` marker that is followed by the original text. You can
Junio C Hamanoa476efa2008-10-10 15:31:42283tell that the original just stated a fact, and your side simply gave in to
284that statement and gave up, while the other side tried to have a more
285positive attitude. You can sometimes come up with a better resolution by
286viewing the original.
287
288
289HOW TO RESOLVE CONFLICTS
290------------------------
291
Junio C Hamano1a4e8412005-12-27 08:17:23292After seeing a conflict, you can do two things:
293
Junio C Hamanoec87f522008-12-10 08:35:25294 * Decide not to merge. The only clean-ups you need are to reset
Junio C Hamano1a4e8412005-12-27 08:17:23295 the index file to the `HEAD` commit to reverse 2. and to clean
Junio C Hamano788eeba2010-12-08 22:50:43296 up working tree changes made by 2. and 3.; `git merge --abort`
297 can be used for this.
Junio C Hamano1a4e8412005-12-27 08:17:23298
Junio C Hamano043628e2008-08-24 03:34:11299 * Resolve the conflicts. Git will mark the conflicts in
300 the working tree. Edit the files into shape and
Junio C Hamanofb1fdf12017-08-27 06:14:59301 'git add' them to the index. Use 'git commit' or
302 'git merge --continue' to seal the deal. The latter command
303 checks whether there is a (interrupted) merge in progress
304 before calling 'git commit'.
Junio C Hamano1a4e8412005-12-27 08:17:23305
Junio C Hamano043628e2008-08-24 03:34:11306You can work through the conflict with a number of tools:
307
Junio C Hamano1aa40d22010-01-21 17:46:43308 * Use a mergetool. `git mergetool` to launch a graphical
Junio C Hamano043628e2008-08-24 03:34:11309 mergetool which will work you through the merge.
310
Junio C Hamano1aa40d22010-01-21 17:46:43311 * Look at the diffs. `git diff` will show a three-way diff,
Junio C Hamanod0d892c2010-01-24 20:06:29312 highlighting changes from both the `HEAD` and `MERGE_HEAD`
313 versions.
Junio C Hamano043628e2008-08-24 03:34:11314
Junio C Hamanod0d892c2010-01-24 20:06:29315 * Look at the diffs from each branch. `git log --merge -p <path>`
316 will show diffs first for the `HEAD` version and then the
317 `MERGE_HEAD` version.
Junio C Hamano043628e2008-08-24 03:34:11318
Junio C Hamano1aa40d22010-01-21 17:46:43319 * Look at the originals. `git show :1:filename` shows the
Junio C Hamanod0d892c2010-01-24 20:06:29320 common ancestor, `git show :2:filename` shows the `HEAD`
321 version, and `git show :3:filename` shows the `MERGE_HEAD`
322 version.
Junio C Hamano1a4e8412005-12-27 08:17:23323
Junio C Hamanoc21ab052009-10-31 04:03:55324
325EXAMPLES
326--------
327
328* Merge branches `fixes` and `enhancements` on top of
329 the current branch, making an octopus merge:
330+
331------------------------------------------------
332$ git merge fixes enhancements
333------------------------------------------------
334
335* Merge branch `obsolete` into the current branch, using `ours`
336 merge strategy:
337+
338------------------------------------------------
339$ git merge -s ours obsolete
340------------------------------------------------
341
342* Merge branch `maint` into the current branch, but do not make
343 a new commit automatically:
344+
345------------------------------------------------
346$ git merge --no-commit maint
347------------------------------------------------
348+
349This can be used when you want to include further changes to the
350merge, or want to write your own merge commit message.
351+
352You should refrain from abusing this option to sneak substantial
353changes into a merge commit. Small fixups like bumping
354release/version name would be acceptable.
355
356
Junio C Hamanod0d892c2010-01-24 20:06:29357include::merge-strategies.txt[]
358
359CONFIGURATION
360-------------
Junio C Hamano06ce83b2018-11-13 14:06:12361include::config/merge.txt[]
Junio C Hamanod0d892c2010-01-24 20:06:29362
Junio C Hamano322c6242015-03-23 21:32:46363branch.<name>.mergeOptions::
Junio C Hamanod0d892c2010-01-24 20:06:29364Sets default options for merging into branch <name>. The syntax and
365supported options are the same as those of 'git merge', but option
366values containing whitespace characters are currently not supported.
367
Junio C Hamano1a4e8412005-12-27 08:17:23368SEE ALSO
369--------
Junio C Hamano35738e82008-01-07 07:55:46370linkgit:git-fmt-merge-msg[1], linkgit:git-pull[1],
Junio C Hamanofce7c7e2008-07-02 03:06:38371linkgit:gitattributes[5],
372linkgit:git-reset[1],
373linkgit:git-diff[1], linkgit:git-ls-files[1],
374linkgit:git-add[1], linkgit:git-rm[1],
375linkgit:git-mergetool[1]
Junio C Hamano1a4e8412005-12-27 08:17:23376
Junio C Hamano1a4e8412005-12-27 08:17:23377GIT
378---
Junio C Hamanof7c042d2008-06-06 22:50:53379Part of the linkgit:git[1] suite