6 git-merge - Join two or more development histories together
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>...]
17 'git merge' --continue
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
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.
45 D---E---F---G---H master
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.
65 include::merge-options.txt[]
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).
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.
82 Set the commit message to be used for the merge commit (in
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.
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.
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).
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.
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."
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
158 This behavior can be suppressed with the `--no-ff` option.
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
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
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`.
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
213 git merge --ff-only v1.2.3
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:
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;
238 Git makes conflict resolution easy.
239 >>>>>>> theirs:sample.txt
240 And here is another line that is cleanly resolved or unmodified.
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
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;
264 Conflict resolution is hard.
266 Git makes conflict resolution easy.
267 >>>>>>> theirs:sample.txt
268 And here is another line that is cleanly resolved or unmodified.
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' to seal the deal.
293 You can work through the conflict with a number of tools:
295 * Use a mergetool. `git mergetool` to launch a graphical
296 mergetool which will work you through the merge.
298 * Look at the diffs. `git diff` will show a three-way diff,
299 highlighting changes from both the `HEAD` and `MERGE_HEAD`
302 * Look at the diffs from each branch. `git log --merge -p <path>`
303 will show diffs first for the `HEAD` version and then the
304 `MERGE_HEAD` version.
306 * Look at the originals. `git show :1:filename` shows the
307 common ancestor, `git show :2:filename` shows the `HEAD`
308 version, and `git show :3:filename` shows the `MERGE_HEAD`
315 * Merge branches `fixes` and `enhancements` on top of
316 the current branch, making an octopus merge:
318 ------------------------------------------------
319 $ git merge fixes enhancements
320 ------------------------------------------------
322 * Merge branch `obsolete` into the current branch, using `ours`
325 ------------------------------------------------
326 $ git merge -s ours obsolete
327 ------------------------------------------------
329 * Merge branch `maint` into the current branch, but do not make
330 a new commit automatically:
332 ------------------------------------------------
333 $ git merge --no-commit maint
334 ------------------------------------------------
336 This can be used when you want to include further changes to the
337 merge, or want to write your own merge commit message.
339 You should refrain from abusing this option to sneak substantial
340 changes into a merge commit. Small fixups like bumping
341 release/version name would be acceptable.
344 include::merge-strategies.txt[]
348 include::merge-config.txt[]
350 branch.<name>.mergeOptions::
351 Sets default options for merging into branch <name>. The syntax and
352 supported options are the same as those of 'git merge', but option
353 values containing whitespace characters are currently not supported.
357 linkgit:git-fmt-merge-msg[1], linkgit:git-pull[1],
358 linkgit:gitattributes[5],
359 linkgit:git-reset[1],
360 linkgit:git-diff[1], linkgit:git-ls-files[1],
361 linkgit:git-add[1], linkgit:git-rm[1],
362 linkgit:git-mergetool[1]
366 Part of the linkgit:git[1] suite