Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 1 | git-merge(1) |
| 2 | ============ |
| 3 | |
| 4 | NAME |
| 5 | ---- |
Junio C Hamano | 7c73c66 | 2007-01-19 00:37:50 | [diff] [blame] | 6 | git-merge - Join two or more development histories together |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 7 | |
| 8 | |
| 9 | SYNOPSIS |
| 10 | -------- |
Junio C Hamano | ee6d961 | 2006-11-27 20:03:22 | [diff] [blame] | 11 | [verse] |
Junio C Hamano | 795a5a3 | 2012-02-02 01:36:37 | [diff] [blame] | 12 | 'git merge' [-n] [--stat] [--no-commit] [--squash] [--[no-]edit] |
Junio C Hamano | cb70539 | 2019-09-18 19:30:01 | [diff] [blame] | 13 | [--no-verify] [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]] |
Junio C Hamano | 7921e7c | 2016-04-29 21:55:09 | [diff] [blame] | 14 | [--[no-]allow-unrelated-histories] |
Junio C Hamano | e872a1c | 2022-01-05 22:15:13 | [diff] [blame] | 15 | [--[no-]rerere-autoupdate] [-m <msg>] [-F <file>] |
| 16 | [--into-name <branch>] [<commit>...] |
Junio C Hamano | c9f11c2 | 2019-07-10 02:54:04 | [diff] [blame] | 17 | 'git merge' (--continue | --abort | --quit) |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 18 | |
| 19 | DESCRIPTION |
| 20 | ----------- |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 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. |
| 26 | |
| 27 | Assume 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 | |
| 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 |
Junio C Hamano | a75aada | 2023-01-22 01:54:30 | [diff] [blame] | 40 | a 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 Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 42 | |
| 43 | ------------ |
| 44 | A---B---C topic |
| 45 | / \ |
| 46 | D---E---F---G---H master |
| 47 | ------------ |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 48 | |
Junio C Hamano | dc8d0c3 | 2017-03-30 23:00:21 | [diff] [blame] | 49 | The second syntax ("`git merge --abort`") can only be run after the |
Junio C Hamano | 788eeba | 2010-12-08 22:50:43 | [diff] [blame] | 50 | merge has resulted in conflicts. 'git merge --abort' will abort the |
| 51 | merge process and try to reconstruct the pre-merge state. However, |
| 52 | if there were uncommitted changes when the merge started (and |
| 53 | especially if those changes were further modified after the merge |
| 54 | was started), 'git merge --abort' will in some cases be unable to |
| 55 | reconstruct the original (pre-merge) changes. Therefore: |
| 56 | |
Junio C Hamano | 3a3357e | 2013-06-26 23:20:56 | [diff] [blame] | 57 | *Warning*: Running 'git merge' with non-trivial uncommitted changes is |
| 58 | discouraged: while possible, it may leave you in a state that is hard to |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 59 | back out of in the case of a conflict. |
Junio C Hamano | 1974bf2 | 2007-10-31 05:57:20 | [diff] [blame] | 60 | |
Junio C Hamano | 14e6683 | 2018-06-18 18:32:19 | [diff] [blame] | 61 | The third syntax ("`git merge --continue`") can only be run after the |
Junio C Hamano | 9e35abf | 2016-12-27 22:37:27 | [diff] [blame] | 62 | merge has resulted in conflicts. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 63 | |
| 64 | OPTIONS |
| 65 | ------- |
Junio C Hamano | 7a031e5 | 2021-08-30 23:54:25 | [diff] [blame] | 66 | :git-merge: 1 |
| 67 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 68 | include::merge-options.txt[] |
| 69 | |
Junio C Hamano | 1974bf2 | 2007-10-31 05:57:20 | [diff] [blame] | 70 | -m <msg>:: |
Junio C Hamano | c0e55e7 | 2009-10-10 00:56:29 | [diff] [blame] | 71 | Set the commit message to be used for the merge commit (in |
Junio C Hamano | f5de4cf | 2010-06-19 00:33:17 | [diff] [blame] | 72 | case one is created). |
Junio C Hamano | 68cf15a | 2010-11-06 01:01:59 | [diff] [blame] | 73 | + |
| 74 | If `--log` is specified, a shortlog of the commits being merged |
| 75 | will be appended to the specified message. |
| 76 | + |
| 77 | The 'git fmt-merge-msg' command can be |
| 78 | used to give a good default for automated 'git merge' |
Junio C Hamano | 7db630e | 2015-09-17 20:26:22 | [diff] [blame] | 79 | invocations. The automated message can include the branch description. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 80 | |
Junio C Hamano | e872a1c | 2022-01-05 22:15:13 | [diff] [blame] | 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 | |
Junio C Hamano | f09b7cd | 2018-08-02 23:01:45 | [diff] [blame] | 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 | + |
| 91 | If `--log` is specified, a shortlog of the commits being merged |
| 92 | will be appended to the specified message. |
| 93 | |
Junio C Hamano | 04495a1 | 2022-08-18 21:13:08 | [diff] [blame] | 94 | include::rerere-options.txt[] |
Junio C Hamano | 19107ef | 2010-01-19 06:20:59 | [diff] [blame] | 95 | |
Junio C Hamano | c9f11c2 | 2019-07-10 02:54:04 | [diff] [blame] | 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 | |
Junio C Hamano | 788eeba | 2010-12-08 22:50:43 | [diff] [blame] | 101 | --abort:: |
| 102 | Abort the current conflict resolution process, and |
Junio C Hamano | 67cc2b7 | 2020-04-30 00:03:20 | [diff] [blame] | 103 | try to reconstruct the pre-merge state. If an autostash entry is |
| 104 | present, apply it to the worktree. |
Junio C Hamano | 788eeba | 2010-12-08 22:50:43 | [diff] [blame] | 105 | + |
| 106 | If there were uncommitted worktree changes present when the merge |
| 107 | started, 'git merge --abort' will in some cases be unable to |
| 108 | reconstruct these changes. It is therefore recommended to always |
| 109 | commit or stash your changes before running 'git merge'. |
| 110 | + |
| 111 | 'git merge --abort' is equivalent to 'git reset --merge' when |
Junio C Hamano | 67cc2b7 | 2020-04-30 00:03:20 | [diff] [blame] | 112 | `MERGE_HEAD` is present unless `MERGE_AUTOSTASH` is also present in |
| 113 | which case 'git merge --abort' applies the stash entry to the worktree |
| 114 | whereas 'git reset --merge' will save the stashed changes in the stash |
Junio C Hamano | 2b43cff | 2020-05-08 22:27:04 | [diff] [blame] | 115 | list. |
Junio C Hamano | 788eeba | 2010-12-08 22:50:43 | [diff] [blame] | 116 | |
Junio C Hamano | 5193787 | 2019-06-13 22:09:30 | [diff] [blame] | 117 | --quit:: |
| 118 | Forget about the current merge in progress. Leave the index |
Junio C Hamano | 67cc2b7 | 2020-04-30 00:03:20 | [diff] [blame] | 119 | and the working tree as-is. If `MERGE_AUTOSTASH` is present, the |
Junio C Hamano | 2b43cff | 2020-05-08 22:27:04 | [diff] [blame] | 120 | stash entry will be saved to the stash list. |
Junio C Hamano | 5193787 | 2019-06-13 22:09:30 | [diff] [blame] | 121 | |
Junio C Hamano | 9e35abf | 2016-12-27 22:37:27 | [diff] [blame] | 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 | |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 127 | <commit>...:: |
| 128 | Commits, usually other branch heads, to merge into our branch. |
Junio C Hamano | a03ac86 | 2011-04-02 04:32:29 | [diff] [blame] | 129 | Specifying more than one commit will create a merge with |
| 130 | more than two parents (affectionately called an Octopus merge). |
| 131 | + |
Junio C Hamano | b051caf | 2014-06-03 22:15:13 | [diff] [blame] | 132 | If no commit is given from the command line, merge the remote-tracking |
| 133 | branches that the current branch is configured to use as its upstream. |
Junio C Hamano | a03ac86 | 2011-04-02 04:32:29 | [diff] [blame] | 134 | See also the configuration section of this manual page. |
Junio C Hamano | e1b2859 | 2015-05-19 21:26:17 | [diff] [blame] | 135 | + |
| 136 | When `FETCH_HEAD` (and no other commit) is specified, the branches |
| 137 | recorded in the `.git/FETCH_HEAD` file by the previous invocation |
| 138 | of `git fetch` for merging are merged to the current branch. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 139 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 140 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 141 | PRE-MERGE CHECKS |
| 142 | ---------------- |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 143 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 144 | Before applying outside changes, you should get your own work in |
| 145 | good shape and committed locally, so it will not be clobbered if |
| 146 | there are conflicts. See also linkgit:git-stash[1]. |
| 147 | 'git pull' and 'git merge' will stop without doing anything when |
| 148 | local uncommitted changes overlap with files that 'git pull'/'git |
| 149 | merge' may need to update. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 150 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 151 | To avoid recording unrelated changes in the merge commit, |
| 152 | 'git pull' and 'git merge' will also abort if there are any changes |
Junio C Hamano | f09b7cd | 2018-08-02 23:01:45 | [diff] [blame] | 153 | registered in the index relative to the `HEAD` commit. (Special |
| 154 | narrow exceptions to this rule may exist depending on which merge |
| 155 | strategy is in use, but generally, the index must match HEAD.) |
Junio C Hamano | 1e6e006 | 2007-07-13 05:33:25 | [diff] [blame] | 156 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 157 | If all named commits are already ancestors of `HEAD`, 'git merge' |
Junio C Hamano | 88bf571 | 2017-09-10 08:39:23 | [diff] [blame] | 158 | will exit early with the message "Already up to date." |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 159 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 160 | FAST-FORWARD MERGE |
| 161 | ------------------ |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 162 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 163 | Often the current branch head is an ancestor of the named commit. |
| 164 | This is the most common case especially when invoked from 'git |
| 165 | pull': you are tracking an upstream repository, you have committed |
| 166 | no local changes, and now you want to update to a newer upstream |
| 167 | revision. In this case, a new commit is not needed to store the |
| 168 | combined history; instead, the `HEAD` (along with the index) is |
| 169 | updated to point at the named commit, without creating an extra |
| 170 | merge commit. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 171 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 172 | This behavior can be suppressed with the `--no-ff` option. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 173 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 174 | TRUE MERGE |
| 175 | ---------- |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 176 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 177 | Except in a fast-forward merge (see above), the branches to be |
| 178 | merged must be tied together by a merge commit that has both of them |
| 179 | as its parents. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 180 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 181 | A merged version reconciling the changes from all branches to be |
| 182 | merged is committed, and your `HEAD`, index, and working tree are |
| 183 | updated to it. It is possible to have modifications in the working |
| 184 | tree as long as they do not overlap; the update will preserve them. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 185 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 186 | When it is not obvious how to reconcile the changes, the following |
| 187 | happens: |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 188 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 189 | 1. The `HEAD` pointer stays the same. |
| 190 | 2. The `MERGE_HEAD` ref is set to point to the other branch head. |
| 191 | 3. Paths that merged cleanly are updated both in the index file and |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 192 | in your working tree. |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 193 | 4. 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 Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 196 | can inspect the stages with `git ls-files -u`). The working |
Junio C Hamano | ec87f52 | 2008-12-10 08:35:25 | [diff] [blame] | 197 | tree files contain the result of the "merge" program; i.e. 3-way |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 198 | merge results with familiar conflict markers `<<<` `===` `>>>`. |
| 199 | 5. No other changes are made. In particular, the local |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 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 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 204 | If you tried a merge which resulted in complex conflicts and |
Junio C Hamano | 788eeba | 2010-12-08 22:50:43 | [diff] [blame] | 205 | want to start over, you can recover with `git merge --abort`. |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 206 | |
Junio C Hamano | 778a341 | 2013-03-28 23:24:30 | [diff] [blame] | 207 | MERGING TAG |
| 208 | ----------- |
| 209 | |
| 210 | When merging an annotated (and possibly signed) tag, Git always |
| 211 | creates a merge commit even if a fast-forward merge is possible, and |
| 212 | the commit message template is prepared with the tag message. |
| 213 | Additionally, if the tag is signed, the signature check is reported |
| 214 | as a comment in the message template. See also linkgit:git-tag[1]. |
| 215 | |
| 216 | When you want to just integrate with the work leading to the commit |
| 217 | that happens to be tagged, e.g. synchronizing with an upstream |
| 218 | release point, you may not want to make an unnecessary merge commit. |
| 219 | |
| 220 | In such a case, you can "unwrap" the tag yourself before feeding it |
| 221 | to `git merge`, or pass `--ff-only` when you do not have any work on |
| 222 | your own. e.g. |
| 223 | |
Junio C Hamano | 91e3395 | 2013-09-05 23:42:26 | [diff] [blame] | 224 | ---- |
Junio C Hamano | 778a341 | 2013-03-28 23:24:30 | [diff] [blame] | 225 | git fetch origin |
| 226 | git merge v1.2.3^0 |
| 227 | git merge --ff-only v1.2.3 |
Junio C Hamano | 91e3395 | 2013-09-05 23:42:26 | [diff] [blame] | 228 | ---- |
Junio C Hamano | 778a341 | 2013-03-28 23:24:30 | [diff] [blame] | 229 | |
| 230 | |
Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 231 | HOW CONFLICTS ARE PRESENTED |
| 232 | --------------------------- |
| 233 | |
| 234 | During a merge, the working tree files are updated to reflect the result |
| 235 | of the merge. Among the changes made to the common ancestor's version, |
| 236 | non-overlapping ones (that is, you changed an area of the file while the |
| 237 | other side left that area intact, or vice versa) are incorporated in the |
| 238 | final result verbatim. When both sides made changes to the same area, |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 239 | however, Git cannot randomly pick one side over the other, and asks you to |
Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 240 | resolve it by leaving what both sides did to that area. |
| 241 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 242 | By default, Git uses the same style as the one used by the "merge" program |
Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 243 | from the RCS suite to present such a conflicted hunk, like this: |
| 244 | |
| 245 | ------------ |
| 246 | Here are lines that are either unchanged from the common |
Junio C Hamano | 2b15318 | 2021-12-15 21:00:31 | [diff] [blame] | 247 | ancestor, or cleanly resolved because only one side changed, |
| 248 | or cleanly resolved because both sides changed the same way. |
Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 249 | <<<<<<< yours:sample.txt |
| 250 | Conflict resolution is hard; |
| 251 | let's go shopping. |
| 252 | ======= |
| 253 | Git makes conflict resolution easy. |
| 254 | >>>>>>> theirs:sample.txt |
| 255 | And here is another line that is cleanly resolved or unmodified. |
| 256 | ------------ |
| 257 | |
Junio C Hamano | ec87f52 | 2008-12-10 08:35:25 | [diff] [blame] | 258 | The area where a pair of conflicting changes happened is marked with markers |
Junio C Hamano | ea82cff | 2009-03-18 01:54:48 | [diff] [blame] | 259 | `<<<<<<<`, `=======`, and `>>>>>>>`. The part before the `=======` |
Junio C Hamano | ec87f52 | 2008-12-10 08:35:25 | [diff] [blame] | 260 | is typically your side, and the part afterwards is typically their side. |
Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 261 | |
Junio C Hamano | ec87f52 | 2008-12-10 08:35:25 | [diff] [blame] | 262 | The default format does not show what the original said in the conflicting |
| 263 | area. You cannot tell how many lines are deleted and replaced with |
| 264 | Barbie's remark on your side. The only thing you can tell is that your |
Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 265 | side wants to say it is hard and you'd prefer to go shopping, while the |
| 266 | other side wants to claim it is easy. |
| 267 | |
Junio C Hamano | 322c624 | 2015-03-23 21:32:46 | [diff] [blame] | 268 | An alternative style can be used by setting the "merge.conflictStyle" |
Junio C Hamano | 2b15318 | 2021-12-15 21:00:31 | [diff] [blame] | 269 | configuration variable to either "diff3" or "zdiff3". In "diff3" |
| 270 | style, the above conflict may look like this: |
Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 271 | |
| 272 | ------------ |
| 273 | Here are lines that are either unchanged from the common |
Junio C Hamano | 2b15318 | 2021-12-15 21:00:31 | [diff] [blame] | 274 | ancestor, or cleanly resolved because only one side changed, |
| 275 | <<<<<<< yours:sample.txt |
| 276 | or cleanly resolved because both sides changed the same way. |
| 277 | Conflict resolution is hard; |
| 278 | let's go shopping. |
| 279 | ||||||| base:sample.txt |
| 280 | or cleanly resolved because both sides changed identically. |
| 281 | Conflict resolution is hard. |
| 282 | ======= |
| 283 | or cleanly resolved because both sides changed the same way. |
| 284 | Git makes conflict resolution easy. |
| 285 | >>>>>>> theirs:sample.txt |
| 286 | And here is another line that is cleanly resolved or unmodified. |
| 287 | ------------ |
| 288 | |
| 289 | while in "zdiff3" style, it may look like this: |
| 290 | |
| 291 | ------------ |
| 292 | Here are lines that are either unchanged from the common |
| 293 | ancestor, or cleanly resolved because only one side changed, |
| 294 | or cleanly resolved because both sides changed the same way. |
Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 295 | <<<<<<< yours:sample.txt |
| 296 | Conflict resolution is hard; |
| 297 | let's go shopping. |
Junio C Hamano | 2b15318 | 2021-12-15 21:00:31 | [diff] [blame] | 298 | ||||||| base:sample.txt |
| 299 | or cleanly resolved because both sides changed identically. |
Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 300 | Conflict resolution is hard. |
| 301 | ======= |
| 302 | Git makes conflict resolution easy. |
| 303 | >>>>>>> theirs:sample.txt |
| 304 | And here is another line that is cleanly resolved or unmodified. |
| 305 | ------------ |
| 306 | |
Junio C Hamano | ea82cff | 2009-03-18 01:54:48 | [diff] [blame] | 307 | In addition to the `<<<<<<<`, `=======`, and `>>>>>>>` markers, it uses |
| 308 | another `|||||||` marker that is followed by the original text. You can |
Junio C Hamano | a476efa | 2008-10-10 15:31:42 | [diff] [blame] | 309 | tell that the original just stated a fact, and your side simply gave in to |
| 310 | that statement and gave up, while the other side tried to have a more |
| 311 | positive attitude. You can sometimes come up with a better resolution by |
| 312 | viewing the original. |
| 313 | |
| 314 | |
| 315 | HOW TO RESOLVE CONFLICTS |
| 316 | ------------------------ |
| 317 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 318 | After seeing a conflict, you can do two things: |
| 319 | |
Junio C Hamano | ec87f52 | 2008-12-10 08:35:25 | [diff] [blame] | 320 | * Decide not to merge. The only clean-ups you need are to reset |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 321 | the index file to the `HEAD` commit to reverse 2. and to clean |
Junio C Hamano | 788eeba | 2010-12-08 22:50:43 | [diff] [blame] | 322 | up working tree changes made by 2. and 3.; `git merge --abort` |
| 323 | can be used for this. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 324 | |
Junio C Hamano | 043628e | 2008-08-24 03:34:11 | [diff] [blame] | 325 | * Resolve the conflicts. Git will mark the conflicts in |
| 326 | the working tree. Edit the files into shape and |
Junio C Hamano | fb1fdf1 | 2017-08-27 06:14:59 | [diff] [blame] | 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'. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 331 | |
Junio C Hamano | 043628e | 2008-08-24 03:34:11 | [diff] [blame] | 332 | You can work through the conflict with a number of tools: |
| 333 | |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 334 | * Use a mergetool. `git mergetool` to launch a graphical |
Junio C Hamano | 043628e | 2008-08-24 03:34:11 | [diff] [blame] | 335 | mergetool which will work you through the merge. |
| 336 | |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 337 | * Look at the diffs. `git diff` will show a three-way diff, |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 338 | highlighting changes from both the `HEAD` and `MERGE_HEAD` |
| 339 | versions. |
Junio C Hamano | 043628e | 2008-08-24 03:34:11 | [diff] [blame] | 340 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 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. |
Junio C Hamano | 043628e | 2008-08-24 03:34:11 | [diff] [blame] | 344 | |
Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 345 | * Look at the originals. `git show :1:filename` shows the |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 346 | common ancestor, `git show :2:filename` shows the `HEAD` |
| 347 | version, and `git show :3:filename` shows the `MERGE_HEAD` |
| 348 | version. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 349 | |
Junio C Hamano | c21ab05 | 2009-10-31 04:03:55 | [diff] [blame] | 350 | |
| 351 | EXAMPLES |
| 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 | + |
| 375 | This can be used when you want to include further changes to the |
| 376 | merge, or want to write your own merge commit message. |
| 377 | + |
| 378 | You should refrain from abusing this option to sneak substantial |
| 379 | changes into a merge commit. Small fixups like bumping |
| 380 | release/version name would be acceptable. |
| 381 | |
| 382 | |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 383 | include::merge-strategies.txt[] |
| 384 | |
| 385 | CONFIGURATION |
| 386 | ------------- |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 387 | |
Junio C Hamano | 322c624 | 2015-03-23 21:32:46 | [diff] [blame] | 388 | branch.<name>.mergeOptions:: |
Junio C Hamano | d0d892c | 2010-01-24 20:06:29 | [diff] [blame] | 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 | |
Junio C Hamano | ba8baee | 2022-09-14 20:25:23 | [diff] [blame] | 393 | include::includes/cmd-config-section-rest.txt[] |
| 394 | |
| 395 | include::config/merge.txt[] |
| 396 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 397 | SEE ALSO |
| 398 | -------- |
Junio C Hamano | 35738e8 | 2008-01-07 07:55:46 | [diff] [blame] | 399 | linkgit:git-fmt-merge-msg[1], linkgit:git-pull[1], |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 400 | linkgit:gitattributes[5], |
| 401 | linkgit:git-reset[1], |
| 402 | linkgit:git-diff[1], linkgit:git-ls-files[1], |
| 403 | linkgit:git-add[1], linkgit:git-rm[1], |
| 404 | linkgit:git-mergetool[1] |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 405 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 406 | GIT |
| 407 | --- |
Junio C Hamano | f7c042d | 2008-06-06 22:50:53 | [diff] [blame] | 408 | Part of the linkgit:git[1] suite |