]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-merge.txt
git-merge.txt: mention 'ORIG_HEAD' in the Description
[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
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
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
b4391657 49The second syntax ("`git merge --abort`") can only be run after the
35d2fffd
JH
50merge 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
76b80cdf
MM
57*Warning*: Running 'git merge' with non-trivial uncommitted changes is
58discouraged: while possible, it may leave you in a state that is hard to
e330d8ca 59back out of in the case of a conflict.
dee48c3c 60
28cb0602 61The third syntax ("`git merge --continue`") can only be run after the
367ff694 62merge has resulted in conflicts.
0f69be53
JH
63
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+
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
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
a03b5553
DL
112`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
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
CP
122--continue::
123 After a 'git merge' stops due to conflicts you can conclude the
124 merge by running 'git merge --continue' (see "HOW TO RESOLVE
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].
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
JN
151To avoid recording unrelated changes in the merge commit,
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
30f2bade 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.
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.
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
29b802aa 197 tree files contain the result of the "merge" program; i.e. 3-way
ebef7e50
JN
198 merge results with familiar conflict markers `<<<` `===` `>>>`.
1995. No other changes are made. In particular, the local
ffb1a4be
JH
200 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
ed4a6baa 204If you tried a merge which resulted in complex conflicts and
35d2fffd 205want to start over, you can recover with `git merge --abort`.
ed4a6baa 206
77c72780
JH
207MERGING 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
e45bda87 224----
77c72780
JH
225git fetch origin
226git merge v1.2.3^0
227git merge --ff-only v1.2.3
e45bda87 228----
77c72780
JH
229
230
70a3f897
JH
231HOW 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,
2de9b711 239however, Git cannot randomly pick one side over the other, and asks you to
70a3f897
JH
240resolve it by leaving what both sides did to that area.
241
2de9b711 242By default, Git uses the same style as the one used by the "merge" program
70a3f897
JH
243from the RCS suite to present such a conflicted hunk, like this:
244
245------------
246Here are lines that are either unchanged from the common
ddfc44a8
EN
247ancestor, or cleanly resolved because only one side changed,
248or cleanly resolved because both sides changed the same way.
70a3f897
JH
249<<<<<<< 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
29b802aa 258The area where a pair of conflicting changes happened is marked with markers
dcb11263 259`<<<<<<<`, `=======`, and `>>>>>>>`. The part before the `=======`
29b802aa 260is typically your side, and the part afterwards is typically their side.
70a3f897 261
29b802aa
RW
262The 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
70a3f897
JH
265side wants to say it is hard and you'd prefer to go shopping, while the
266other side wants to claim it is easy.
267
da0005b8 268An alternative style can be used by setting the "merge.conflictStyle"
ddfc44a8
EN
269configuration variable to either "diff3" or "zdiff3". In "diff3"
270style, the above conflict may look like this:
70a3f897
JH
271
272------------
273Here are lines that are either unchanged from the common
ddfc44a8 274ancestor, or cleanly resolved because only one side changed,
70a3f897 275<<<<<<< yours:sample.txt
ddfc44a8 276or cleanly resolved because both sides changed the same way.
70a3f897
JH
277Conflict resolution is hard;
278let's go shopping.
ddfc44a8
EN
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.
295<<<<<<< yours:sample.txt
296Conflict resolution is hard;
297let's go shopping.
298||||||| base:sample.txt
299or cleanly resolved because both sides changed identically.
70a3f897
JH
300Conflict 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
dcb11263
CJ
307In addition to the `<<<<<<<`, `=======`, and `>>>>>>>` markers, it uses
308another `|||||||` marker that is followed by the original text. You can
70a3f897
JH
309tell 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
ffb1a4be
JH
318After seeing a conflict, you can do two things:
319
29b802aa 320 * Decide not to merge. The only clean-ups you need are to reset
ffb1a4be 321 the index file to the `HEAD` commit to reverse 2. and to clean
35d2fffd
JH
322 up working tree changes made by 2. and 3.; `git merge --abort`
323 can be used for this.
ffb1a4be 324
34ad1afa
DH
325 * Resolve the conflicts. Git will mark the conflicts in
326 the working tree. Edit the files into shape and
e2de82f2
MG
327 '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'.
ffb1a4be 331
34ad1afa
DH
332You can work through the conflict with a number of tools:
333
ca768288 334 * Use a mergetool. `git mergetool` to launch a graphical
34ad1afa
DH
335 mergetool which will work you through the merge.
336
ca768288 337 * Look at the diffs. `git diff` will show a three-way diff,
3588cf94
JN
338 highlighting changes from both the `HEAD` and `MERGE_HEAD`
339 versions.
34ad1afa 340
3588cf94
JN
341 * 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.
34ad1afa 344
ca768288 345 * Look at the originals. `git show :1:filename` shows the
3588cf94
JN
346 common ancestor, `git show :2:filename` shows the `HEAD`
347 version, and `git show :3:filename` shows the `MERGE_HEAD`
348 version.
ffb1a4be 349
d504f697
CB
350
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
a4081bac
JN
383include::merge-strategies.txt[]
384
35e9d630
JN
385CONFIGURATION
386-------------
35e9d630 387
da0005b8 388branch.<name>.mergeOptions::
35e9d630
JN
389 Sets default options for merging into branch <name>. The syntax and
390 supported options are the same as those of 'git merge', but option
391 values containing whitespace characters are currently not supported.
392
18d89fe2
ÆAB
393include::includes/cmd-config-section-rest.txt[]
394
395include::config/merge.txt[]
396
3c64314c
PB
397SEE ALSO
398--------
5162e697 399linkgit:git-fmt-merge-msg[1], linkgit:git-pull[1],
483bc4f0
JN
400linkgit: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]
3c64314c 405
0f69be53
JH
406GIT
407---
9e1f0a85 408Part of the linkgit:git[1] suite