@@ -156,6 +156,59 @@ with linkgit:git-merge[1]:
156
156
* any messages that would have been printed to stdout (the
157
157
<<IM,Informational messages>>)
158
158
159
+ MISTAKES TO AVOID
160
+ -----------------
161
+
162
+ Do NOT look through the resulting toplevel tree to try to find which
163
+ files conflict; parse the <<CFI,Conflicted file info>> section instead.
164
+ Not only would parsing an entire tree be horrendously slow in large
165
+ repositories, there are numerous types of conflicts not representable by
166
+ conflict markers (modify/delete, mode conflict, binary file changed on
167
+ both sides, file/directory conflicts, various rename conflict
168
+ permutations, etc.)
169
+
170
+ Do NOT interpret an empty <<CFI,Conflicted file info>> list as a clean
171
+ merge; check the exit status. A merge can have conflicts without having
172
+ individual files conflict (there are a few types of directory rename
173
+ conflicts that fall into this category, and others might also be added
174
+ in the future).
175
+
176
+ Do NOT attempt to guess or make the user guess the conflict types from
177
+ the <<CFI,Conflicted file info>> list. The information there is
178
+ insufficient to do so. For example: Rename/rename(1to2) conflicts (both
179
+ sides renamed the same file differently) will result in three different
180
+ file having higher order stages (but each only has one higher order
181
+ stage), with no way (short of the <<IM,Informational messages>> section)
182
+ to determine which three files are related. File/directory conflicts
183
+ also result in a file with exactly one higher order stage.
184
+ Possibly-involved-in-directory-rename conflicts (when
185
+ "merge.directoryRenames" is unset or set to "conflicts") also result in
186
+ a file with exactly one higher order stage. In all cases, the
187
+ <<IM,Informational messages>> section has the necessary info, though it
188
+ is not designed to be machine parseable.
189
+
190
+ Do NOT assume that each paths from <<CFI,Conflicted file info>>, and
191
+ the logical conflicts in the <<IM,Informational messages>> have a
192
+ one-to-one mapping, nor that there is a one-to-many mapping, nor a
193
+ many-to-one mapping. Many-to-many mappings exist, meaning that each
194
+ path can have many logical conflict types in a single merge, and each
195
+ logical conflict type can affect many paths.
196
+
197
+ Do NOT assume all filenames listed in the <<IM,Informational messages>>
198
+ section had conflicts. Messages can be included for files that have no
199
+ conflicts, such as "Auto-merging <file>".
200
+
201
+ AVOID taking the OIDS from the <<CFI,Conflicted file info>> and
202
+ re-merging them to present the conflicts to the user. This will lose
203
+ information. Instead, look up the version of the file found within the
204
+ <<OIDTLT,OID of toplevel tree>> and show that instead. In particular,
205
+ the latter will have conflict markers annotated with the original
206
+ branch/commit being merged and, if renames were involved, the original
207
+ filename. While you could include the original branch/commit in the
208
+ conflict marker annotations when re-merging, the original filename is
209
+ not available from the <<CFI,Conflicted file info>> and thus you would
210
+ be losing information that might help the user resolve the conflict.
211
+
159
212
[[DEPMERGE]]
160
213
DEPRECATED DESCRIPTION
161
214
----------------------
0 commit comments