]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-merge.txt
Start the 2.46 cycle
[thirdparty/git.git] / Documentation / git-merge.txt
CommitLineData
0f69be53
JH
1git-merge(1)
2============
0f69be53
JH
3
4NAME
5----
c3f0baac 6git-merge - Join two or more development histories together
0f69be53
JH
7
8
9SYNOPSIS
10--------
17bcdad3 11[verse]
f8246281 12'git merge' [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
a1f3dd7e 13 [--no-verify] [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
09c2cb87 14 [--[no-]allow-unrelated-histories]
bd2bc942
JH
15 [--[no-]rerere-autoupdate] [-m <msg>] [-F <file>]
16 [--into-name <branch>] [<commit>...]
437591a9 17'git merge' (--continue | --abort | --quit)
0f69be53
JH
18
19DESCRIPTION
20-----------
b40bb374
JN
21Incorporates changes from the named commits (since the time their
22histories diverged from the current branch) into the current
63956c55 23branch. This command is used by `git pull` to incorporate changes
b40bb374
JN
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
63956c55 28`master`:
b40bb374
JN
29
30------------
31 A---B---C topic
32 /
33 D---E---F---G master
34------------
35
63956c55 36Then `git merge topic` will replay the changes made on the
b40bb374
JN
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
0c514d57
PB
40a log message from the user describing the changes. Before the operation,
41`ORIG_HEAD` is set to the tip of the current branch (`C`).
b40bb374
JN
42
43------------
44 A---B---C topic
45 / \
46 D---E---F---G---H master
47------------
0f69be53 48
dc18ead5
ML
49A merge stops if there's a conflict that cannot be resolved
50automatically or if `--no-commit` was provided when initiating the
51merge. At that point you can run `git merge --abort` or `git merge
52--continue`.
35d2fffd 53
dc18ead5
ML
54`git merge --abort` will abort the merge process and try to reconstruct
55the pre-merge state. However, if there were uncommitted changes when the
56merge started (and especially if those changes were further modified
57after the merge was started), `git merge --abort` will in some cases be
58unable to reconstruct the original (pre-merge) changes. Therefore:
35d2fffd 59
63956c55 60*Warning*: Running `git merge` with non-trivial uncommitted changes is
76b80cdf 61discouraged: while possible, it may leave you in a state that is hard to
e330d8ca 62back out of in the case of a conflict.
dee48c3c 63
0f69be53
JH
64OPTIONS
65-------
359ff693
EN
66:git-merge: 1
67
93d69d86 68include::merge-options.txt[]
0f69be53 69
dee48c3c 70-m <msg>::
0f8a02c6 71 Set the commit message to be used for the merge commit (in
f0ecac2b 72 case one is created).
af77aee9
NP
73+
74If `--log` is specified, a shortlog of the commits being merged
75will be appended to the specified message.
76+
63956c55
ML
77The `git fmt-merge-msg` command can be
78used to give a good default for automated `git merge`
561d2b79 79invocations. The automated message can include the branch description.
3c64314c 80
bd2bc942
JH
81--into-name <branch>::
82 Prepare the default merge message as if merging to the branch
83 `<branch>`, instead of the name of the real branch to which
84 the merge is made.
85
920f22e6
JS
86-F <file>::
87--file=<file>::
88 Read the commit message to be used for the merge commit (in
89 case one is created).
90+
91If `--log` is specified, a shortlog of the commits being merged
92will be appended to the specified message.
93
0dbc715a 94include::rerere-options.txt[]
cb6020bb 95
9d223d43
NTND
96--overwrite-ignore::
97--no-overwrite-ignore::
98 Silently overwrite ignored files from the merge result. This
99 is the default behavior. Use `--no-overwrite-ignore` to abort.
100
35d2fffd
JH
101--abort::
102 Abort the current conflict resolution process, and
a03b5553
DL
103 try to reconstruct the pre-merge state. If an autostash entry is
104 present, apply it to the worktree.
35d2fffd
JH
105+
106If there were uncommitted worktree changes present when the merge
63956c55 107started, `git merge --abort` will in some cases be unable to
35d2fffd 108reconstruct these changes. It is therefore recommended to always
63956c55 109commit or stash your changes before running `git merge`.
35d2fffd 110+
63956c55 111`git merge --abort` is equivalent to `git reset --merge` when
a03b5553 112`MERGE_HEAD` is present unless `MERGE_AUTOSTASH` is also present in
63956c55
ML
113which case `git merge --abort` applies the stash entry to the worktree
114whereas `git reset --merge` will save the stashed changes in the stash
c5e786ab 115list.
35d2fffd 116
f3f8311e
NTND
117--quit::
118 Forget about the current merge in progress. Leave the index
a03b5553 119 and the working tree as-is. If `MERGE_AUTOSTASH` is present, the
c5e786ab 120 stash entry will be saved to the stash list.
f3f8311e 121
367ff694 122--continue::
63956c55
ML
123 After a `git merge` stops due to conflicts you can conclude the
124 merge by running `git merge --continue` (see "HOW TO RESOLVE
367ff694
CP
125 CONFLICTS" section below).
126
57bddb11
TR
127<commit>...::
128 Commits, usually other branch heads, to merge into our branch.
93e535a5
JH
129 Specifying more than one commit will create a merge with
130 more than two parents (affectionately called an Octopus merge).
131+
a01f7f2b
FC
132If no commit is given from the command line, merge the remote-tracking
133branches that the current branch is configured to use as its upstream.
93e535a5 134See also the configuration section of this manual page.
74e8bc59
JH
135+
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.
0f69be53 139
bb73d73c 140
30f2bade
JN
141PRE-MERGE CHECKS
142----------------
0f69be53 143
30f2bade
JN
144Before 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].
63956c55
ML
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.
3ae854c3 150
30f2bade 151To avoid recording unrelated changes in the merge commit,
63956c55 152`git pull` and `git merge` will also abort if there are any changes
55f39cf7
EN
153registered 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.)
dbddb714 156
63956c55 157If all named commits are already ancestors of `HEAD`, `git merge`
7560f547 158will exit early with the message "Already up to date."
3ae854c3 159
29280311
JN
160FAST-FORWARD MERGE
161------------------
162
163Often the current branch head is an ancestor of the named commit.
63956c55
ML
164This is the most common case especially when invoked from `git
165pull`: you are tracking an upstream repository, you have committed
29280311
JN
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.
171
172This behavior can be suppressed with the `--no-ff` option.
ffb1a4be 173
ebef7e50
JN
174TRUE MERGE
175----------
c0be8aa0 176
29280311
JN
177Except 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.
ffb1a4be 180
ebef7e50
JN
181A 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.
ffb1a4be 185
ebef7e50
JN
186When it is not obvious how to reconcile the changes, the following
187happens:
ffb1a4be 188
ebef7e50
JN
1891. 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
ffb1a4be 192 in your working tree.
ebef7e50
JN
1934. 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
b1889c36 196 can inspect the stages with `git ls-files -u`). The working
b7dd54a2 197 tree files contain the result of the merge operation; i.e. 3-way
ebef7e50 198 merge results with familiar conflict markers `<<<` `===` `>>>`.
dada3864 1995. A ref named `AUTO_MERGE` is written, pointing to a tree
4fa1edb9
PB
200 corresponding to the current content of the working tree (including
201 conflict markers for textual conflicts). Note that this ref is only
202 written when the 'ort' merge strategy is used (the default).
2036. No other changes are made. In particular, the local
ffb1a4be
JH
204 modifications you had before you started merge will stay the
205 same and the index entries for them stay as they were,
206 i.e. matching `HEAD`.
207
ed4a6baa 208If you tried a merge which resulted in complex conflicts and
35d2fffd 209want to start over, you can recover with `git merge --abort`.
ed4a6baa 210
77c72780
JH
211MERGING TAG
212-----------
213
214When merging an annotated (and possibly signed) tag, Git always
215creates a merge commit even if a fast-forward merge is possible, and
216the commit message template is prepared with the tag message.
217Additionally, if the tag is signed, the signature check is reported
218as a comment in the message template. See also linkgit:git-tag[1].
219
220When you want to just integrate with the work leading to the commit
221that happens to be tagged, e.g. synchronizing with an upstream
222release point, you may not want to make an unnecessary merge commit.
223
224In such a case, you can "unwrap" the tag yourself before feeding it
225to `git merge`, or pass `--ff-only` when you do not have any work on
226your own. e.g.
227
e45bda87 228----
77c72780
JH
229git fetch origin
230git merge v1.2.3^0
231git merge --ff-only v1.2.3
e45bda87 232----
77c72780
JH
233
234
70a3f897
JH
235HOW CONFLICTS ARE PRESENTED
236---------------------------
237
238During a merge, the working tree files are updated to reflect the result
239of the merge. Among the changes made to the common ancestor's version,
240non-overlapping ones (that is, you changed an area of the file while the
241other side left that area intact, or vice versa) are incorporated in the
242final result verbatim. When both sides made changes to the same area,
2de9b711 243however, Git cannot randomly pick one side over the other, and asks you to
70a3f897
JH
244resolve it by leaving what both sides did to that area.
245
2de9b711 246By default, Git uses the same style as the one used by the "merge" program
70a3f897
JH
247from the RCS suite to present such a conflicted hunk, like this:
248
249------------
250Here are lines that are either unchanged from the common
ddfc44a8
EN
251ancestor, or cleanly resolved because only one side changed,
252or cleanly resolved because both sides changed the same way.
70a3f897
JH
253<<<<<<< yours:sample.txt
254Conflict resolution is hard;
255let's go shopping.
256=======
257Git makes conflict resolution easy.
258>>>>>>> theirs:sample.txt
259And here is another line that is cleanly resolved or unmodified.
260------------
261
29b802aa 262The area where a pair of conflicting changes happened is marked with markers
dcb11263 263`<<<<<<<`, `=======`, and `>>>>>>>`. The part before the `=======`
29b802aa 264is typically your side, and the part afterwards is typically their side.
70a3f897 265
29b802aa
RW
266The default format does not show what the original said in the conflicting
267area. You cannot tell how many lines are deleted and replaced with
268Barbie's remark on your side. The only thing you can tell is that your
70a3f897
JH
269side wants to say it is hard and you'd prefer to go shopping, while the
270other side wants to claim it is easy.
271
63956c55 272An alternative style can be used by setting the `merge.conflictStyle`
ddfc44a8
EN
273configuration variable to either "diff3" or "zdiff3". In "diff3"
274style, the above conflict may look like this:
70a3f897
JH
275
276------------
277Here are lines that are either unchanged from the common
ddfc44a8 278ancestor, or cleanly resolved because only one side changed,
70a3f897 279<<<<<<< yours:sample.txt
ddfc44a8 280or cleanly resolved because both sides changed the same way.
70a3f897
JH
281Conflict resolution is hard;
282let's go shopping.
ddfc44a8
EN
283||||||| base:sample.txt
284or cleanly resolved because both sides changed identically.
285Conflict resolution is hard.
286=======
287or cleanly resolved because both sides changed the same way.
288Git makes conflict resolution easy.
289>>>>>>> theirs:sample.txt
290And here is another line that is cleanly resolved or unmodified.
291------------
292
293while in "zdiff3" style, it may look like this:
294
295------------
296Here are lines that are either unchanged from the common
297ancestor, or cleanly resolved because only one side changed,
298or cleanly resolved because both sides changed the same way.
299<<<<<<< yours:sample.txt
300Conflict resolution is hard;
301let's go shopping.
302||||||| base:sample.txt
303or cleanly resolved because both sides changed identically.
70a3f897
JH
304Conflict resolution is hard.
305=======
306Git makes conflict resolution easy.
307>>>>>>> theirs:sample.txt
308And here is another line that is cleanly resolved or unmodified.
309------------
310
dcb11263
CJ
311In addition to the `<<<<<<<`, `=======`, and `>>>>>>>` markers, it uses
312another `|||||||` marker that is followed by the original text. You can
70a3f897
JH
313tell that the original just stated a fact, and your side simply gave in to
314that statement and gave up, while the other side tried to have a more
315positive attitude. You can sometimes come up with a better resolution by
316viewing the original.
317
318
319HOW TO RESOLVE CONFLICTS
320------------------------
321
ffb1a4be
JH
322After seeing a conflict, you can do two things:
323
29b802aa 324 * Decide not to merge. The only clean-ups you need are to reset
ffb1a4be 325 the index file to the `HEAD` commit to reverse 2. and to clean
35d2fffd
JH
326 up working tree changes made by 2. and 3.; `git merge --abort`
327 can be used for this.
ffb1a4be 328
34ad1afa
DH
329 * Resolve the conflicts. Git will mark the conflicts in
330 the working tree. Edit the files into shape and
63956c55
ML
331 `git add` them to the index. Use `git commit` or
332 `git merge --continue` to seal the deal. The latter command
e2de82f2 333 checks whether there is a (interrupted) merge in progress
63956c55 334 before calling `git commit`.
ffb1a4be 335
34ad1afa
DH
336You can work through the conflict with a number of tools:
337
ca768288 338 * Use a mergetool. `git mergetool` to launch a graphical
cf6cac20 339 mergetool which will work through the merge with you.
34ad1afa 340
ca768288 341 * Look at the diffs. `git diff` will show a three-way diff,
3588cf94 342 highlighting changes from both the `HEAD` and `MERGE_HEAD`
4fa1edb9
PB
343 versions. `git diff AUTO_MERGE` will show what changes you've
344 made so far to resolve textual conflicts.
34ad1afa 345
3588cf94
JN
346 * Look at the diffs from each branch. `git log --merge -p <path>`
347 will show diffs first for the `HEAD` version and then the
348 `MERGE_HEAD` version.
34ad1afa 349
ca768288 350 * Look at the originals. `git show :1:filename` shows the
3588cf94
JN
351 common ancestor, `git show :2:filename` shows the `HEAD`
352 version, and `git show :3:filename` shows the `MERGE_HEAD`
353 version.
ffb1a4be 354
d504f697
CB
355
356EXAMPLES
357--------
358
359* Merge branches `fixes` and `enhancements` on top of
360 the current branch, making an octopus merge:
361+
362------------------------------------------------
363$ git merge fixes enhancements
364------------------------------------------------
365
366* Merge branch `obsolete` into the current branch, using `ours`
367 merge strategy:
368+
369------------------------------------------------
370$ git merge -s ours obsolete
371------------------------------------------------
372
373* Merge branch `maint` into the current branch, but do not make
374 a new commit automatically:
375+
376------------------------------------------------
377$ git merge --no-commit maint
378------------------------------------------------
379+
380This can be used when you want to include further changes to the
381merge, or want to write your own merge commit message.
382+
383You should refrain from abusing this option to sneak substantial
384changes into a merge commit. Small fixups like bumping
385release/version name would be acceptable.
386
387
a4081bac
JN
388include::merge-strategies.txt[]
389
35e9d630
JN
390CONFIGURATION
391-------------
35e9d630 392
da0005b8 393branch.<name>.mergeOptions::
35e9d630 394 Sets default options for merging into branch <name>. The syntax and
63956c55 395 supported options are the same as those of `git merge`, but option
35e9d630
JN
396 values containing whitespace characters are currently not supported.
397
18d89fe2
ÆAB
398include::includes/cmd-config-section-rest.txt[]
399
400include::config/merge.txt[]
401
3c64314c
PB
402SEE ALSO
403--------
5162e697 404linkgit:git-fmt-merge-msg[1], linkgit:git-pull[1],
483bc4f0
JN
405linkgit:gitattributes[5],
406linkgit:git-reset[1],
407linkgit:git-diff[1], linkgit:git-ls-files[1],
408linkgit:git-add[1], linkgit:git-rm[1],
409linkgit:git-mergetool[1]
3c64314c 410
0f69be53
JH
411GIT
412---
9e1f0a85 413Part of the linkgit:git[1] suite