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