blob: 0aeff572a59d8fea319f334232deae4a9df4e464 [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 Hamanoe872a1c2022-01-05 22:15:1315[--[no-]rerere-autoupdate] [-m <msg>] [-F <file>]
16[--into-name <branch>] [<commit>...]
Junio C Hamanoc9f11c22019-07-10 02:54:0417'git merge' (--continue | --abort | --quit)
Junio C Hamano1a4e8412005-12-27 08:17:2318
19DESCRIPTION
20-----------
Junio C Hamanod0d892c2010-01-24 20:06:2921Incorporates 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
Junio C Hamanoa75aada2023-01-22 01:54:3040a log message from the user describing the changes. Before the operation,
41`ORIG_HEAD` is set to the tip of the current branch (`C`).
Junio C Hamanod0d892c2010-01-24 20:06:2942
43------------
44 A---B---C topic
45 / \
46 D---E---F---G---H master
47------------
Junio C Hamano1a4e8412005-12-27 08:17:2348
Junio C Hamanodc8d0c32017-03-30 23:00:2149The second syntax ("`git merge --abort`") can only be run after the
Junio C Hamano788eeba2010-12-08 22:50:4350merge has resulted in conflicts. 'git merge --abort' will abort the
51merge process and try to reconstruct the pre-merge state. However,
52if there were uncommitted changes when the merge started (and
53especially if those changes were further modified after the merge
54was started), 'git merge --abort' will in some cases be unable to
55reconstruct the original (pre-merge) changes. Therefore:
56
Junio C Hamano3a3357e2013-06-26 23:20:5657*Warning*: Running 'git merge' with non-trivial uncommitted changes is
58discouraged: while possible, it may leave you in a state that is hard to
Junio C Hamano1aa40d22010-01-21 17:46:4359back out of in the case of a conflict.
Junio C Hamano1974bf22007-10-31 05:57:2060
Junio C Hamano14e66832018-06-18 18:32:1961The third syntax ("`git merge --continue`") can only be run after the
Junio C Hamano9e35abf2016-12-27 22:37:2762merge has resulted in conflicts.
Junio C Hamano1a4e8412005-12-27 08:17:2363
64OPTIONS
65-------
Junio C Hamano7a031e52021-08-30 23:54:2566:git-merge: 1
67
Junio C Hamano1a4e8412005-12-27 08:17:2368include::merge-options.txt[]
69
Junio C Hamano1974bf22007-10-31 05:57:2070-m <msg>::
Junio C Hamanoc0e55e72009-10-10 00:56:2971Set the commit message to be used for the merge commit (in
Junio C Hamanof5de4cf2010-06-19 00:33:1772case one is created).
Junio C Hamano68cf15a2010-11-06 01:01:5973+
74If `--log` is specified, a shortlog of the commits being merged
75will be appended to the specified message.
76+
77The 'git fmt-merge-msg' command can be
78used to give a good default for automated 'git merge'
Junio C Hamano7db630e2015-09-17 20:26:2279invocations. The automated message can include the branch description.
Junio C Hamano1a4e8412005-12-27 08:17:2380
Junio C Hamanoe872a1c2022-01-05 22:15:1381--into-name <branch>::
82Prepare the default merge message as if merging to the branch
83`<branch>`, instead of the name of the real branch to which
84the merge is made.
85
Junio C Hamanof09b7cd2018-08-02 23:01:4586-F <file>::
87--file=<file>::
88Read the commit message to be used for the merge commit (in
89case one is created).
90+
91If `--log` is specified, a shortlog of the commits being merged
92will be appended to the specified message.
93
Junio C Hamano04495a12022-08-18 21:13:0894include::rerere-options.txt[]
Junio C Hamano19107ef2010-01-19 06:20:5995
Junio C Hamanoc9f11c22019-07-10 02:54:0496--overwrite-ignore::
97--no-overwrite-ignore::
98Silently overwrite ignored files from the merge result. This
99is the default behavior. Use `--no-overwrite-ignore` to abort.
100
Junio C Hamano788eeba2010-12-08 22:50:43101--abort::
102Abort the current conflict resolution process, and
Junio C Hamano67cc2b72020-04-30 00:03:20103try to reconstruct the pre-merge state. If an autostash entry is
104present, apply it to the worktree.
Junio C Hamano788eeba2010-12-08 22:50:43105+
106If there were uncommitted worktree changes present when the merge
107started, 'git merge --abort' will in some cases be unable to
108reconstruct these changes. It is therefore recommended to always
109commit or stash your changes before running 'git merge'.
110+
111'git merge --abort' is equivalent to 'git reset --merge' when
Junio C Hamano67cc2b72020-04-30 00:03:20112`MERGE_HEAD` is present unless `MERGE_AUTOSTASH` is also present in
113which case 'git merge --abort' applies the stash entry to the worktree
114whereas 'git reset --merge' will save the stashed changes in the stash
Junio C Hamano2b43cff2020-05-08 22:27:04115list.
Junio C Hamano788eeba2010-12-08 22:50:43116
Junio C Hamano51937872019-06-13 22:09:30117--quit::
118Forget about the current merge in progress. Leave the index
Junio C Hamano67cc2b72020-04-30 00:03:20119and the working tree as-is. If `MERGE_AUTOSTASH` is present, the
Junio C Hamano2b43cff2020-05-08 22:27:04120stash entry will be saved to the stash list.
Junio C Hamano51937872019-06-13 22:09:30121
Junio C Hamano9e35abf2016-12-27 22:37:27122--continue::
123After a 'git merge' stops due to conflicts you can conclude the
124merge by running 'git merge --continue' (see "HOW TO RESOLVE
125CONFLICTS" section below).
126
Junio C Hamano1aa40d22010-01-21 17:46:43127<commit>...::
128Commits, usually other branch heads, to merge into our branch.
Junio C Hamanoa03ac862011-04-02 04:32:29129Specifying more than one commit will create a merge with
130more than two parents (affectionately called an Octopus merge).
131+
Junio C Hamanob051caf2014-06-03 22:15:13132If no commit is given from the command line, merge the remote-tracking
133branches that the current branch is configured to use as its upstream.
Junio C Hamanoa03ac862011-04-02 04:32:29134See also the configuration section of this manual page.
Junio C Hamanoe1b28592015-05-19 21:26:17135+
136When `FETCH_HEAD` (and no other commit) is specified, the branches
137recorded in the `.git/FETCH_HEAD` file by the previous invocation
138of `git fetch` for merging are merged to the current branch.
Junio C Hamano1a4e8412005-12-27 08:17:23139
Junio C Hamano1a4e8412005-12-27 08:17:23140
Junio C Hamanod0d892c2010-01-24 20:06:29141PRE-MERGE CHECKS
142----------------
Junio C Hamano1a4e8412005-12-27 08:17:23143
Junio C Hamanod0d892c2010-01-24 20:06:29144Before applying outside changes, you should get your own work in
145good shape and committed locally, so it will not be clobbered if
146there are conflicts. See also linkgit:git-stash[1].
147'git pull' and 'git merge' will stop without doing anything when
148local uncommitted changes overlap with files that 'git pull'/'git
149merge' may need to update.
Junio C Hamano1a4e8412005-12-27 08:17:23150
Junio C Hamanod0d892c2010-01-24 20:06:29151To avoid recording unrelated changes in the merge commit,
152'git pull' and 'git merge' will also abort if there are any changes
Junio C Hamanof09b7cd2018-08-02 23:01:45153registered in the index relative to the `HEAD` commit. (Special
154narrow exceptions to this rule may exist depending on which merge
155strategy is in use, but generally, the index must match HEAD.)
Junio C Hamano1e6e0062007-07-13 05:33:25156
Junio C Hamanod0d892c2010-01-24 20:06:29157If all named commits are already ancestors of `HEAD`, 'git merge'
Junio C Hamano88bf5712017-09-10 08:39:23158will exit early with the message "Already up to date."
Junio C Hamano1a4e8412005-12-27 08:17:23159
Junio C Hamanod0d892c2010-01-24 20:06:29160FAST-FORWARD MERGE
161------------------
Junio C Hamano1a4e8412005-12-27 08:17:23162
Junio C Hamanod0d892c2010-01-24 20:06:29163Often the current branch head is an ancestor of the named commit.
164This is the most common case especially when invoked from 'git
165pull': you are tracking an upstream repository, you have committed
166no local changes, and now you want to update to a newer upstream
167revision. In this case, a new commit is not needed to store the
168combined history; instead, the `HEAD` (along with the index) is
169updated to point at the named commit, without creating an extra
170merge commit.
Junio C Hamano1a4e8412005-12-27 08:17:23171
Junio C Hamanod0d892c2010-01-24 20:06:29172This behavior can be suppressed with the `--no-ff` option.
Junio C Hamano1a4e8412005-12-27 08:17:23173
Junio C Hamanod0d892c2010-01-24 20:06:29174TRUE MERGE
175----------
Junio C Hamano1a4e8412005-12-27 08:17:23176
Junio C Hamanod0d892c2010-01-24 20:06:29177Except in a fast-forward merge (see above), the branches to be
178merged must be tied together by a merge commit that has both of them
179as its parents.
Junio C Hamano1a4e8412005-12-27 08:17:23180
Junio C Hamanod0d892c2010-01-24 20:06:29181A merged version reconciling the changes from all branches to be
182merged is committed, and your `HEAD`, index, and working tree are
183updated to it. It is possible to have modifications in the working
184tree as long as they do not overlap; the update will preserve them.
Junio C Hamano1a4e8412005-12-27 08:17:23185
Junio C Hamanod0d892c2010-01-24 20:06:29186When it is not obvious how to reconcile the changes, the following
187happens:
Junio C Hamano1a4e8412005-12-27 08:17:23188
Junio C Hamanod0d892c2010-01-24 20:06:291891. The `HEAD` pointer stays the same.
1902. The `MERGE_HEAD` ref is set to point to the other branch head.
1913. Paths that merged cleanly are updated both in the index file and
Junio C Hamano1a4e8412005-12-27 08:17:23192 in your working tree.
Junio C Hamanod0d892c2010-01-24 20:06:291934. For conflicting paths, the index file records up to three
194 versions: stage 1 stores the version from the common ancestor,
195 stage 2 from `HEAD`, and stage 3 from `MERGE_HEAD` (you
Junio C Hamanofce7c7e2008-07-02 03:06:38196 can inspect the stages with `git ls-files -u`). The working
Junio C Hamanoec87f522008-12-10 08:35:25197 tree files contain the result of the "merge" program; i.e. 3-way
Junio C Hamanod0d892c2010-01-24 20:06:29198 merge results with familiar conflict markers `<<<` `===` `>>>`.
1995. No other changes are made. In particular, the local
Junio C Hamano1a4e8412005-12-27 08:17:23200 modifications you had before you started merge will stay the
201 same and the index entries for them stay as they were,
202 i.e. matching `HEAD`.
203
Junio C Hamanod0d892c2010-01-24 20:06:29204If you tried a merge which resulted in complex conflicts and
Junio C Hamano788eeba2010-12-08 22:50:43205want to start over, you can recover with `git merge --abort`.
Junio C Hamanod0d892c2010-01-24 20:06:29206
Junio C Hamano778a3412013-03-28 23:24:30207MERGING TAG
208-----------
209
210When merging an annotated (and possibly signed) tag, Git always
211creates a merge commit even if a fast-forward merge is possible, and
212the commit message template is prepared with the tag message.
213Additionally, if the tag is signed, the signature check is reported
214as a comment in the message template. See also linkgit:git-tag[1].
215
216When you want to just integrate with the work leading to the commit
217that happens to be tagged, e.g. synchronizing with an upstream
218release point, you may not want to make an unnecessary merge commit.
219
220In such a case, you can "unwrap" the tag yourself before feeding it
221to `git merge`, or pass `--ff-only` when you do not have any work on
222your own. e.g.
223
Junio C Hamano91e33952013-09-05 23:42:26224----
Junio C Hamano778a3412013-03-28 23:24:30225git fetch origin
226git merge v1.2.3^0
227git merge --ff-only v1.2.3
Junio C Hamano91e33952013-09-05 23:42:26228----
Junio C Hamano778a3412013-03-28 23:24:30229
230
Junio C Hamanoa476efa2008-10-10 15:31:42231HOW CONFLICTS ARE PRESENTED
232---------------------------
233
234During a merge, the working tree files are updated to reflect the result
235of the merge. Among the changes made to the common ancestor's version,
236non-overlapping ones (that is, you changed an area of the file while the
237other side left that area intact, or vice versa) are incorporated in the
238final result verbatim. When both sides made changes to the same area,
Junio C Hamano076ffcc2013-02-06 05:13:21239however, Git cannot randomly pick one side over the other, and asks you to
Junio C Hamanoa476efa2008-10-10 15:31:42240resolve it by leaving what both sides did to that area.
241
Junio C Hamano076ffcc2013-02-06 05:13:21242By default, Git uses the same style as the one used by the "merge" program
Junio C Hamanoa476efa2008-10-10 15:31:42243from the RCS suite to present such a conflicted hunk, like this:
244
245------------
246Here are lines that are either unchanged from the common
Junio C Hamano2b153182021-12-15 21:00:31247ancestor, or cleanly resolved because only one side changed,
248or cleanly resolved because both sides changed the same way.
Junio C Hamanoa476efa2008-10-10 15:31:42249<<<<<<< yours:sample.txt
250Conflict resolution is hard;
251let's go shopping.
252=======
253Git makes conflict resolution easy.
254>>>>>>> theirs:sample.txt
255And here is another line that is cleanly resolved or unmodified.
256------------
257
Junio C Hamanoec87f522008-12-10 08:35:25258The area where a pair of conflicting changes happened is marked with markers
Junio C Hamanoea82cff2009-03-18 01:54:48259`<<<<<<<`, `=======`, and `>>>>>>>`. The part before the `=======`
Junio C Hamanoec87f522008-12-10 08:35:25260is typically your side, and the part afterwards is typically their side.
Junio C Hamanoa476efa2008-10-10 15:31:42261
Junio C Hamanoec87f522008-12-10 08:35:25262The default format does not show what the original said in the conflicting
263area. You cannot tell how many lines are deleted and replaced with
264Barbie's remark on your side. The only thing you can tell is that your
Junio C Hamanoa476efa2008-10-10 15:31:42265side wants to say it is hard and you'd prefer to go shopping, while the
266other side wants to claim it is easy.
267
Junio C Hamano322c6242015-03-23 21:32:46268An alternative style can be used by setting the "merge.conflictStyle"
Junio C Hamano2b153182021-12-15 21:00:31269configuration variable to either "diff3" or "zdiff3". In "diff3"
270style, the above conflict may look like this:
Junio C Hamanoa476efa2008-10-10 15:31:42271
272------------
273Here are lines that are either unchanged from the common
Junio C Hamano2b153182021-12-15 21:00:31274ancestor, or cleanly resolved because only one side changed,
275<<<<<<< yours:sample.txt
276or cleanly resolved because both sides changed the same way.
277Conflict resolution is hard;
278let's go shopping.
279||||||| base:sample.txt
280or cleanly resolved because both sides changed identically.
281Conflict resolution is hard.
282=======
283or cleanly resolved because both sides changed the same way.
284Git makes conflict resolution easy.
285>>>>>>> theirs:sample.txt
286And here is another line that is cleanly resolved or unmodified.
287------------
288
289while in "zdiff3" style, it may look like this:
290
291------------
292Here are lines that are either unchanged from the common
293ancestor, or cleanly resolved because only one side changed,
294or cleanly resolved because both sides changed the same way.
Junio C Hamanoa476efa2008-10-10 15:31:42295<<<<<<< yours:sample.txt
296Conflict resolution is hard;
297let's go shopping.
Junio C Hamano2b153182021-12-15 21:00:31298||||||| base:sample.txt
299or cleanly resolved because both sides changed identically.
Junio C Hamanoa476efa2008-10-10 15:31:42300Conflict resolution is hard.
301=======
302Git makes conflict resolution easy.
303>>>>>>> theirs:sample.txt
304And here is another line that is cleanly resolved or unmodified.
305------------
306
Junio C Hamanoea82cff2009-03-18 01:54:48307In addition to the `<<<<<<<`, `=======`, and `>>>>>>>` markers, it uses
308another `|||||||` marker that is followed by the original text. You can
Junio C Hamanoa476efa2008-10-10 15:31:42309tell that the original just stated a fact, and your side simply gave in to
310that statement and gave up, while the other side tried to have a more
311positive attitude. You can sometimes come up with a better resolution by
312viewing the original.
313
314
315HOW TO RESOLVE CONFLICTS
316------------------------
317
Junio C Hamano1a4e8412005-12-27 08:17:23318After seeing a conflict, you can do two things:
319
Junio C Hamanoec87f522008-12-10 08:35:25320 * Decide not to merge. The only clean-ups you need are to reset
Junio C Hamano1a4e8412005-12-27 08:17:23321 the index file to the `HEAD` commit to reverse 2. and to clean
Junio C Hamano788eeba2010-12-08 22:50:43322 up working tree changes made by 2. and 3.; `git merge --abort`
323 can be used for this.
Junio C Hamano1a4e8412005-12-27 08:17:23324
Junio C Hamano043628e2008-08-24 03:34:11325 * Resolve the conflicts. Git will mark the conflicts in
326 the working tree. Edit the files into shape and
Junio C Hamanofb1fdf12017-08-27 06:14:59327 'git add' them to the index. Use 'git commit' or
328 'git merge --continue' to seal the deal. The latter command
329 checks whether there is a (interrupted) merge in progress
330 before calling 'git commit'.
Junio C Hamano1a4e8412005-12-27 08:17:23331
Junio C Hamano043628e2008-08-24 03:34:11332You can work through the conflict with a number of tools:
333
Junio C Hamano1aa40d22010-01-21 17:46:43334 * Use a mergetool. `git mergetool` to launch a graphical
Junio C Hamano043628e2008-08-24 03:34:11335 mergetool which will work you through the merge.
336
Junio C Hamano1aa40d22010-01-21 17:46:43337 * Look at the diffs. `git diff` will show a three-way diff,
Junio C Hamanod0d892c2010-01-24 20:06:29338 highlighting changes from both the `HEAD` and `MERGE_HEAD`
339 versions.
Junio C Hamano043628e2008-08-24 03:34:11340
Junio C Hamanod0d892c2010-01-24 20:06:29341 * Look at the diffs from each branch. `git log --merge -p <path>`
342 will show diffs first for the `HEAD` version and then the
343 `MERGE_HEAD` version.
Junio C Hamano043628e2008-08-24 03:34:11344
Junio C Hamano1aa40d22010-01-21 17:46:43345 * Look at the originals. `git show :1:filename` shows the
Junio C Hamanod0d892c2010-01-24 20:06:29346 common ancestor, `git show :2:filename` shows the `HEAD`
347 version, and `git show :3:filename` shows the `MERGE_HEAD`
348 version.
Junio C Hamano1a4e8412005-12-27 08:17:23349
Junio C Hamanoc21ab052009-10-31 04:03:55350
351EXAMPLES
352--------
353
354* Merge branches `fixes` and `enhancements` on top of
355 the current branch, making an octopus merge:
356+
357------------------------------------------------
358$ git merge fixes enhancements
359------------------------------------------------
360
361* Merge branch `obsolete` into the current branch, using `ours`
362 merge strategy:
363+
364------------------------------------------------
365$ git merge -s ours obsolete
366------------------------------------------------
367
368* Merge branch `maint` into the current branch, but do not make
369 a new commit automatically:
370+
371------------------------------------------------
372$ git merge --no-commit maint
373------------------------------------------------
374+
375This can be used when you want to include further changes to the
376merge, or want to write your own merge commit message.
377+
378You should refrain from abusing this option to sneak substantial
379changes into a merge commit. Small fixups like bumping
380release/version name would be acceptable.
381
382
Junio C Hamanod0d892c2010-01-24 20:06:29383include::merge-strategies.txt[]
384
385CONFIGURATION
386-------------
Junio C Hamanod0d892c2010-01-24 20:06:29387
Junio C Hamano322c6242015-03-23 21:32:46388branch.<name>.mergeOptions::
Junio C Hamanod0d892c2010-01-24 20:06:29389Sets default options for merging into branch <name>. The syntax and
390supported options are the same as those of 'git merge', but option
391values containing whitespace characters are currently not supported.
392
Junio C Hamanoba8baee2022-09-14 20:25:23393include::includes/cmd-config-section-rest.txt[]
394
395include::config/merge.txt[]
396
Junio C Hamano1a4e8412005-12-27 08:17:23397SEE ALSO
398--------
Junio C Hamano35738e82008-01-07 07:55:46399linkgit:git-fmt-merge-msg[1], linkgit:git-pull[1],
Junio C Hamanofce7c7e2008-07-02 03:06:38400linkgit:gitattributes[5],
401linkgit:git-reset[1],
402linkgit:git-diff[1], linkgit:git-ls-files[1],
403linkgit:git-add[1], linkgit:git-rm[1],
404linkgit:git-mergetool[1]
Junio C Hamano1a4e8412005-12-27 08:17:23405
Junio C Hamano1a4e8412005-12-27 08:17:23406GIT
407---
Junio C Hamanof7c042d2008-06-06 22:50:53408Part of the linkgit:git[1] suite