From: "Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Christian Couder" <chriscool@tuxfamily.org>,
"Taylor Blau" <me@ttaylorr.com>,
"Johannes Altmanninger" <aclopte@gmail.com>,
"Ramsay Jones" <ramsay@ramsayjones.plus.com>,
"Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
"Christian Couder" <christian.couder@gmail.com>,
"René Scharfe" <l.s.r@web.de>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Elijah Newren" <newren@gmail.com>,
"Johannes Sixt" <j6t@kdbg.org>,
"Josh Steadmon" <steadmon@google.com>,
"Emily Shaffer" <emilyshaffer@google.com>,
"Elijah Newren" <newren@gmail.com>
Subject: [PATCH v6 00/12] In-core git merge-tree ("Server side merges")
Date: Wed, 23 Feb 2022 07:46:41 +0000 [thread overview]
Message-ID: <pull.1122.v6.git.1645602413.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1122.v5.git.1645340082.gitgitgadget@gmail.com>
== Basic Summary ==
This series introduces a new mode to git merge-tree allowing it to perform
real merges (three-way text content merges, recursive ancestor
consolidation, rename detection, proper directory/file conflict handling,
etc.) and write the result as a toplevel tree. It doesn't touch the working
tree or index, and doesn't create any commits or update any refs. It could
be used to do merges when in a bare repository (thus potentially making it
of interest to Git hosting sites, i.e. "Server side merges"), or for doing a
merge of branches that aren't checked out.
It does not handle similar functionality for cherry-picks, rebases, or
reverts; that is also of interest, but is being deferred for a future
series.
== Quick Overview ==
* Patches 1-2: preparatory cleanups
* Patches 3-4: implement basic real merges
* Patches 5-6: include informational messages ("CONFLICT" messages and
such) in output
* Patches 7-10: add ability to include ls-files -u style of info in the
output
* Patch 11: support --allow-unrelated-histories
* Patch 12: augment the manual with potential usage mistakes
== Updates Log ==
Stuff NOT included that reviewers brought up in various rounds (and which
might still be an open question):
* Having -z affect the informational messages section[1]
* Having a machine-parseable variant of information from the informational
messages section[2]
* Very generic (mode, oid, stage, filename) printing formatting[3]
* Providing similar functionality for doing cherry-picks/rebases/reverts,
i.e. a scheme for three-way merges with a specified merge-base[4]. That's
being deferred to a future series. [1]
https://lore.kernel.org/git/CABPp-BG7id0GfpDee_7ETZ_94BC_i-e_=-u=PrYJeD7d4sVbiw@mail.gmail.com/
[2]
https://lore.kernel.org/git/nycvar.QRO.7.76.6.2202211059430.26495@tvgsbejvaqbjf.bet/,
https://lore.kernel.org/git/220221.86y224b80b.gmgdl@evledraar.gmail.com/
[3]
https://lore.kernel.org/git/CABPp-BGnOes7J_piDyBUeuLVm274w4-9G3k0vR-0it3z7TPn_w@mail.gmail.com/
[4]
https://lore.kernel.org/git/CABPp-BEaemkGGm0cSofP0gau7YN-y6HFoi0yJbHA8+iGjxsYSA@mail.gmail.com/
Updates since v5:
* Used reverse_commit_list() to reverse a commit_list without extra
allocations
* Several documentation updates
Updates since v4:
* Fixed double "is" in documentation.
* Fixed a few small items with testcases
Updates since v3:
* Dropped previous patches 5, 6, and 8 of the old series; they weren't
being used and opened a can of worms[1]
* [Patch 3] Restructured argument checking, including using an enum
* [Patch 4] Restored the extended paragraph about the deprecated form of
git-merge-tree, mentioned write-tree in plumbing commands, and a few
other small fixups to the documentation
* [Patch 4] Also provide an example of a clean merge rather than just a
conflicted one
* [Patch 6] Fix the incompatible arguments check and add some tests for it
* [Patch 6] Introduce an anonymize_hash() shell function to make tests
easier to read (less repeated sed)
* [Patch 9] Rename --exclude-modes-oids-stages to --name-only; no short
option for now
* [Patch 10] When -z passed, the tree in the first section should have a
trailing NUL rather than trailing newline [1]
https://lore.kernel.org/git/CABPp-BEKuXHELVx4=5JJTj5HVOKZ=Y-4G4BK47BCZYYRSrkFsQ@mail.gmail.com/
Updates since v2:
* Improved patches from Dscho for the diff_warn_rename_limit() handling
* Add a -z option for NUL-terminated conflict info lines (so that filenames
do not have to be quoted)
Updates since v1 (or v3 depending on how you count; thanks to René, Ævar,
Christian, Dscho for very helpful feedback):
* New patch from Dscho allowing diff_warn_rename_limit() to print somewhere
other than stdout (I hope he's okay with me including his Signed-off-by)
* Now prints filenames relative to prefix, much like ls-files
* Renamed --exclude-oids-and-modes to --exclude-modes-oids-stages and gave
it a -l shorthand; I'm wondering if I should just drop this option,
though.
* And numerous cleanups, in lots of areas:
* Multiple parse-options cleanups
* Lots of commit message cleanups
* Wording tweaks to the "Description" section of the manual
* Several small code cleanups
* I dropped the RFC label
[There were also two submissions of a previous series; see
https://lore.kernel.org/git/pull.1114.v2.git.git.1641403655.gitgitgadget@gmail.com/]
[https://lore.kernel.org/git/pull.1114.v2.git.git.1641403655.gitgitgadget@gmail.com/%5D]
Updates since original submission v2 (thanks to Christian, Dscho, Ramsay,
and René for suggestions and comments):
* Significant changes to output format:
* Flags no longer take a filename for additional output; they write to
stdout instead.
* More information included by default when there are conflicts (no need
to request it with additional flags, instead flags can be used to
suppress it).
* Provide (mode, oid, stage, file) tuples -- i.e. ls-files -u style of
information -- when there are conflicts. Add a flag to only list
conflicted files if that's preferred.
* Much more thorough manual for git-merge-tree.txt
* Renamed option from --real to --write-tree
* Accept an optional --trivial-merge option to get old style merge-tree
behavior
* Allow both --write-tree and --trivial-merge to be omitted since we can
deduce which from number of arguments
* Document exit code when the merge cannot be run (so we can distinguish
other error cases from conflicts)
* testcase cleanups: test_tick, early skip of test when using recursive
backend, variable renames, etc.
* various minor code cleanups
* Add a new --allow-unrelated-histories option (with same meaning as the
one used in git merge)
* Rebased on top of en/remerge-diff to avoid a small conflict
Updates since original submission v1 (thanks to Johannes Altmanninger and
Fabian for suggestions):
* Fixed a bad patch splitting, and a style issue pointed out by Johannes
Altimanninger
* Fixed misleading commit messages in new test cases
* Fixed my comments about how commit-tree could be used to correctly use
two -p flags
Elijah Newren (12):
merge-tree: rename merge_trees() to trivial_merge_trees()
merge-tree: move logic for existing merge into new function
merge-tree: add option parsing and initial shell for real merge
function
merge-tree: implement real merges
merge-ort: split out a separate display_update_messages() function
merge-tree: support including merge messages in output
merge-ort: provide a merge_get_conflicted_files() helper function
merge-tree: provide a list of which files have conflicts
merge-tree: provide easy access to `ls-files -u` style info
merge-tree: allow `ls-files -u` style info to be NUL terminated
merge-tree: add a --allow-unrelated-histories flag
git-merge-tree.txt: add a section on potentional usage mistakes
Documentation/git-merge-tree.txt | 228 +++++++++++++++++++++++++++--
builtin/merge-tree.c | 186 ++++++++++++++++++++++--
git.c | 2 +-
merge-ort.c | 109 +++++++++-----
merge-ort.h | 29 ++++
t/t4301-merge-tree-write-tree.sh | 238 +++++++++++++++++++++++++++++++
6 files changed, 730 insertions(+), 62 deletions(-)
create mode 100755 t/t4301-merge-tree-write-tree.sh
base-commit: ea5df61cf358d3c831189e2f04863abc2157e3e1
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1122%2Fnewren%2Fin-core-merge-tree-v6
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1122/newren/in-core-merge-tree-v6
Pull-Request: https://github.com/gitgitgadget/git/pull/1122
Range-diff vs v5:
1: 4a7cd5542bb = 1: 4a7cd5542bb merge-tree: rename merge_trees() to trivial_merge_trees()
2: 4780ff6784d = 2: 4780ff6784d merge-tree: move logic for existing merge into new function
3: 60253745f5c = 3: 60253745f5c merge-tree: add option parsing and initial shell for real merge function
4: 7994775a934 ! 4: f8266d39c1b merge-tree: implement real merges
@@ Documentation/git-merge-tree.txt: git-merge-tree(1)
+'git merge-tree' [--write-tree] <branch1> <branch2>
+'git merge-tree' [--trivial-merge] <base-tree> <branch1> <branch2> (deprecated)
++[[NEWMERGE]]
DESCRIPTION
-----------
-Reads three tree-ish, and output trivial merge results and
@@ Documentation/git-merge-tree.txt: git-merge-tree(1)
-index. For this reason, the output from the command omits
-entries that match the <branch1> tree.
+
++This command has a modern `--write-tree` mode and a deprecated
++`--trivial-merge` mode. With the exception of the
++<<DEPMERGE,DEPRECATED DESCRIPTION>> section at the end, the rest of
++this documentation describes modern `--write-tree` mode.
++
+Performs a merge, but does not make any new commits and does not read
+from or write to either the working tree or index.
+
-+The first form will merge the two branches, doing a real merge. A real
-+merge is distinguished from a trivial merge in that it includes:
++The performed merge will use the same feature as the "real"
++linkgit:git-merge[1], including:
+
+ * three way content merges of individual files
+ * rename detection
@@ Documentation/git-merge-tree.txt: git-merge-tree(1)
+ merge base, creating a virtual merge base by merging the merge bases)
+ * etc.
+
-+After the merge completes, the first form will create a new toplevel
-+tree object. See `OUTPUT` below for details.
-+
-+The second form is deprecated; it is kept for backward compatibility
-+reasons but may be deleted in the future. Other than the optional
-+`--trivial-merge`, it accepts no options. It can only do a trivial
-+merge. It reads three tree-ish, and outputs trivial merge results and
-+conflicting stages to the standard output in a semi-diff format.
-+Since this was designed for higher level scripts to consume and merge
-+the results back into the index, it omits entries that match
-+<branch1>. The result of this second form is similar to what
-+three-way 'git read-tree -m' does, but instead of storing the results
-+in the index, the command outputs the entries to the standard output.
-+This form not only has limited applicability, the output format is
-+also difficult to work with, and it will generally be less performant
-+than the first form even on successful merges (especially if working
-+in large repositories). The remainder of this manual will only
-+discuss the first form.
++After the merge completes, a new toplevel tree object is created. See
++`OUTPUT` below for details.
+
++[[OUTPUT]]
+OUTPUT
+------
+
@@ Documentation/git-merge-tree.txt: git-merge-tree(1)
+USAGE NOTES
+-----------
+
-+git-merge-tree was written to be low-level plumbing, similar to
-+hash-object, mktree, commit-tree, write-tree, update-ref, and mktag.
-+Thus, it could be used as a part of a series of steps such as
++This command is intended as low-level plumbing, similar to
++linkgit:git-hash-object[1], linkgit:git-mktree[1],
++linkgit:git-commit-tree[1], linkgit:git-write-tree[1],
++linkgit:git-update-ref[1], and linkgit:git-mktag[1]. Thus, it can be
++used as a part of a series of steps such as:
+
+ NEWTREE=$(git merge-tree --write-tree $BRANCH1 $BRANCH2)
+ test $? -eq 0 || die "There were conflicts..."
+ NEWCOMMIT=$(git commit-tree $NEWTREE -p $BRANCH1 -p $BRANCH2)
+ git update-ref $BRANCH1 $NEWCOMMIT
++
++[[DEPMERGE]]
++DEPRECATED DESCRIPTION
++----------------------
++
++Per the <<NEWMERGE,DESCRIPTION>> and unlike the rest of this
++documentation, this section describes the deprecated `--trivial-merge`
++mode.
++
++Other than the optional `--trivial-merge`, this mode accepts no
++options.
++
++This mode reads three tree-ish, and outputs trivial merge results and
++conflicting stages to the standard output in a semi-diff format.
++Since this was designed for higher level scripts to consume and merge
++the results back into the index, it omits entries that match
++<branch1>. The result of this second form is similar to what
++three-way 'git read-tree -m' does, but instead of storing the results
++in the index, the command outputs the entries to the standard output.
++
++This form not only has limited applicability (a trivial merge cannot
++handle content merges of individual files, rename detection, proper
++directory/file conflict handling, etc.), the output format is also
++difficult to work with, and it will generally be less performant than
++the first form even on successful merges (especially if working in
++large repositories).
GIT
---
@@ builtin/merge-tree.c: struct merge_tree_options {
{
- die(_("real merges are not yet implemented"));
+ struct commit *parent1, *parent2;
-+ struct commit_list *common;
+ struct commit_list *merge_bases = NULL;
-+ struct commit_list *j;
+ struct merge_options opt;
+ struct merge_result result = { 0 };
+
@@ builtin/merge-tree.c: struct merge_tree_options {
+ * Get the merge bases, in reverse order; see comment above
+ * merge_incore_recursive in merge-ort.h
+ */
-+ common = get_merge_bases(parent1, parent2);
-+ if (!common)
++ merge_bases = get_merge_bases(parent1, parent2);
++ if (!merge_bases)
+ die(_("refusing to merge unrelated histories"));
-+ for (j = common; j; j = j->next)
-+ commit_list_insert(j->item, &merge_bases);
++ merge_bases = reverse_commit_list(merge_bases);
+
+ merge_incore_recursive(&opt, merge_bases, parent1, parent2, &result);
+ if (result.clean < 0)
5: e0f95e094cf = 5: 6629af14919 merge-ort: split out a separate display_update_messages() function
6: 90c4adecb23 ! 6: 17b57efb714 merge-tree: support including merge messages in output
@@ Documentation/git-merge-tree.txt: git-merge-tree - Perform merge without touchin
+'git merge-tree' [--write-tree] [<options>] <branch1> <branch2>
'git merge-tree' [--trivial-merge] <base-tree> <branch1> <branch2> (deprecated)
- DESCRIPTION
-@@ Documentation/git-merge-tree.txt: than the first form even on successful merges (especially if working
- in large repositories). The remainder of this manual will only
- discuss the first form.
+ [[NEWMERGE]]
+@@ Documentation/git-merge-tree.txt: linkgit:git-merge[1], including:
+ After the merge completes, a new toplevel tree object is created. See
+ `OUTPUT` below for details.
+OPTIONS
+-------
@@ Documentation/git-merge-tree.txt: than the first form even on successful merges
+ default is to include these messages if there are merge
+ conflicts, and to omit them otherwise.
+
+ [[OUTPUT]]
OUTPUT
------
-For either a successful or conflicted merge, the output from
-git-merge-tree is simply one line:
-+By default, for a successful merge, the output from git-merge-tree is
-+simply one line:
++For a successful merge, the output from git-merge-tree is simply one
++line:
+
+ <OID of toplevel tree>
+
@@ Documentation/git-merge-tree.txt: than the first form even on successful merges
-The printed tree object corresponds to what would be checked out in
-the working tree at the end of `git merge`, and thus may have files
-with conflict markers in them.
++[[OIDTLT]]
+OID of toplevel tree
+~~~~~~~~~~~~~~~~~~~~
+
@@ Documentation/git-merge-tree.txt: than the first form even on successful merges
+working tree at the end of `git merge`. If there were conflicts, then
+files within this tree may have embedded conflict markers.
+
++[[IM]]
+Informational messages
+~~~~~~~~~~~~~~~~~~~~~~
+
@@ Documentation/git-merge-tree.txt: than the first form even on successful merges
EXIT STATUS
-----------
-@@ Documentation/git-merge-tree.txt: Thus, it could be used as a part of a series of steps such as
+@@ Documentation/git-merge-tree.txt: used as a part of a series of steps such as:
NEWCOMMIT=$(git commit-tree $NEWTREE -p $BRANCH1 -p $BRANCH2)
git update-ref $BRANCH1 $NEWCOMMIT
-+Note that when the exit status is non-zero, NEWTREE in this sequence
++Note that when the exit status is non-zero, `NEWTREE` in this sequence
+will contain a lot more output than just a tree.
+
- GIT
- ---
- Part of the linkgit:git[1] suite
+ [[DEPMERGE]]
+ DEPRECATED DESCRIPTION
+ ----------------------
## builtin/merge-tree.c ##
@@ builtin/merge-tree.c: enum mode {
7: 12e2351092a = 7: 4c8f42372dd merge-ort: provide a merge_get_conflicted_files() helper function
8: 5bb7d3725ad ! 8: 7b1ee417f3d merge-tree: provide a list of which files have conflicts
@@ Commit message
Signed-off-by: Elijah Newren <newren@gmail.com>
## Documentation/git-merge-tree.txt ##
-@@ Documentation/git-merge-tree.txt: simply one line:
+@@ Documentation/git-merge-tree.txt: line:
Whereas for a conflicted merge, the output is by default of the form:
<OID of toplevel tree>
@@ Documentation/git-merge-tree.txt: This is a tree object that represents what wou
working tree at the end of `git merge`. If there were conflicts, then
files within this tree may have embedded conflict markers.
++[[CFI]]
+Conflicted file list
+~~~~~~~~~~~~~~~~~~~~
+
@@ Documentation/git-merge-tree.txt: This is a tree object that represents what wou
+as explained for the configuration variable `core.quotePath` (see
+linkgit:git-config[1]).
+
+ [[IM]]
Informational messages
~~~~~~~~~~~~~~~~~~~~~~
-
## builtin/merge-tree.c ##
@@
@@ builtin/merge-tree.c: struct merge_tree_options {
+ const char *prefix)
{
struct commit *parent1, *parent2;
- struct commit_list *common;
+ struct commit_list *merge_bases = NULL;
@@ builtin/merge-tree.c: static int real_merge(struct merge_tree_options *o,
o->show_messages = !result.clean;
9: 3c2ca198cec ! 9: f1231a8fbc8 merge-tree: provide easy access to `ls-files -u` style info
@@ Commit message
Signed-off-by: Elijah Newren <newren@gmail.com>
## Documentation/git-merge-tree.txt ##
-@@ Documentation/git-merge-tree.txt: discuss the first form.
+@@ Documentation/git-merge-tree.txt: After the merge completes, a new toplevel tree object is created. See
OPTIONS
-------
@@ Documentation/git-merge-tree.txt: discuss the first form.
--[no-]messages::
Write any informational messages such as "Auto-merging <path>"
or CONFLICT notices to the end of stdout. If unspecified, the
-@@ Documentation/git-merge-tree.txt: simply one line:
+@@ Documentation/git-merge-tree.txt: line:
Whereas for a conflicted merge, the output is by default of the form:
<OID of toplevel tree>
@@ Documentation/git-merge-tree.txt: simply one line:
<Informational messages>
These are discussed individually below.
-@@ Documentation/git-merge-tree.txt: This is a tree object that represents what would be checked out in the
- working tree at the end of `git merge`. If there were conflicts, then
+@@ Documentation/git-merge-tree.txt: working tree at the end of `git merge`. If there were conflicts, then
files within this tree may have embedded conflict markers.
+ [[CFI]]
-Conflicted file list
+Conflicted file info
~~~~~~~~~~~~~~~~~~~~
@@ Documentation/git-merge-tree.txt: This is a tree object that represents what wou
+the `--name-only` option is passed, the mode, object, and stage will
+be omitted.
+ [[IM]]
Informational messages
~~~~~~~~~~~~~~~~~~~~~~
@@ Documentation/git-merge-tree.txt: This is a tree object that represents what wou
* "Auto-merging <file>"
* "CONFLICT (rename/delete): <oldfile> renamed...but deleted in..."
-@@ Documentation/git-merge-tree.txt: Thus, it could be used as a part of a series of steps such as
- Note that when the exit status is non-zero, NEWTREE in this sequence
+@@ Documentation/git-merge-tree.txt: used as a part of a series of steps such as:
+ Note that when the exit status is non-zero, `NEWTREE` in this sequence
will contain a lot more output than just a tree.
-+git-merge-tree was written to provide users with the same information
-+that they'd have access to if using `git merge`:
-+ * what would be written to the working tree (the <OID of toplevel tree>)
++For conflicts, the output includes the same information that you'd get
++with linkgit:git-merge[1]:
++
++ * what would be written to the working tree (the
++ <<OIDTLT,OID of toplevel tree>>)
+ * the higher order stages that would be written to the index (the
-+ <Conflicted file info>)
-+ * any messages that would have been printed to stdout (the <Informational
-+ messages>)
++ <<CFI,Conflicted file info>>)
++ * any messages that would have been printed to stdout (the
++ <<IM,Informational messages>>)
+
- GIT
- ---
- Part of the linkgit:git[1] suite
+ [[DEPMERGE]]
+ DEPRECATED DESCRIPTION
+ ----------------------
## builtin/merge-tree.c ##
@@ builtin/merge-tree.c: enum mode {
10: 6e89e17693a ! 10: 22297e6ce75 merge-tree: allow `ls-files -u` style info to be NUL terminated
@@ Commit message
Signed-off-by: Elijah Newren <newren@gmail.com>
## Documentation/git-merge-tree.txt ##
-@@ Documentation/git-merge-tree.txt: discuss the first form.
+@@ Documentation/git-merge-tree.txt: After the merge completes, a new toplevel tree object is created. See
OPTIONS
-------
@@ Documentation/git-merge-tree.txt: discuss the first form.
+ Do not quote filenames in the <Conflicted file info> section,
+ and end each filename with a NUL character rather than
+ newline. Also begin the messages section with a NUL character
-+ instead of a newline. See OUTPUT below for more information.
++ instead of a newline. See <<OUTPUT>> below for more information.
+
--name-only::
In the Conflicted file info section, instead of writing a list
@@ Documentation/git-merge-tree.txt: OID of toplevel tree
+files within this tree may have embedded conflict markers. This section
+is always followed by a newline (or NUL if `-z` is passed).
+ [[CFI]]
Conflicted file info
- ~~~~~~~~~~~~~~~~~~~~
@@ Documentation/git-merge-tree.txt: This is a sequence of lines with the format
The filename will be quoted as explained for the configuration
variable `core.quotePath` (see linkgit:git-config[1]). However, if
@@ Documentation/git-merge-tree.txt: This is a sequence of lines with the format
+be omitted. If `-z` is passed, the "lines" are terminated by a NUL
+character instead of a newline character.
+ [[IM]]
Informational messages
~~~~~~~~~~~~~~~~~~~~~~
11: 6ddd5ffde9c ! 11: db73c6dd823 merge-tree: add a --allow-unrelated-histories flag
@@ Documentation/git-merge-tree.txt: OPTIONS
+ share no common history. This flag can be given to override that
+ check and make the merge proceed anyway.
+
+ [[OUTPUT]]
OUTPUT
------
-
## builtin/merge-tree.c ##
@@ builtin/merge-tree.c: enum mode {
@@ builtin/merge-tree.c: enum mode {
@@ builtin/merge-tree.c: static int real_merge(struct merge_tree_options *o,
* merge_incore_recursive in merge-ort.h
*/
- common = get_merge_bases(parent1, parent2);
-- if (!common)
-+ if (!common && !o->allow_unrelated_histories)
+ merge_bases = get_merge_bases(parent1, parent2);
+- if (!merge_bases)
++ if (!merge_bases && !o->allow_unrelated_histories)
die(_("refusing to merge unrelated histories"));
- for (j = common; j; j = j->next)
- commit_list_insert(j->item, &merge_bases);
+ merge_bases = reverse_commit_list(merge_bases);
+
@@ builtin/merge-tree.c: int cmd_merge_tree(int argc, const char **argv, const char *prefix)
&o.name_only,
N_("list filenames without modes/oids/stages"),
12: 7abf633b638 ! 12: d58a7c7a9f6 git-merge-tree.txt: add a section on potentional usage mistakes
@@ Commit message
Signed-off-by: Elijah Newren <newren@gmail.com>
## Documentation/git-merge-tree.txt ##
-@@ Documentation/git-merge-tree.txt: that they'd have access to if using `git merge`:
- * any messages that would have been printed to stdout (the <Informational
- messages>)
+@@ Documentation/git-merge-tree.txt: with linkgit:git-merge[1]:
+ * any messages that would have been printed to stdout (the
+ <<IM,Informational messages>>)
+MISTAKES TO AVOID
+-----------------
+
+Do NOT look through the resulting toplevel tree to try to find which
-+files conflict; parse the <Conflicted file info> section instead. Not
-+only would parsing an entire tree be horrendously slow in large
++files conflict; parse the <<CFI,Conflicted file info>> section instead.
++Not only would parsing an entire tree be horrendously slow in large
+repositories, there are numerous types of conflicts not representable by
+conflict markers (modify/delete, mode conflict, binary file changed on
+both sides, file/directory conflicts, various rename conflict
+permutations, etc.)
+
-+Do NOT interpret an empty <Conflicted file info> list as a clean merge;
-+check the exit status. A merge can have conflicts without having
++Do NOT interpret an empty <<CFI,Conflicted file info>> list as a clean
++merge; check the exit status. A merge can have conflicts without having
+individual files conflict (there are a few types of directory rename
+conflicts that fall into this category, and others might also be added
+in the future).
+
+Do NOT attempt to guess or make the user guess the conflict types from
-+the <Conflicted file info> list. The information there is insufficient
-+to do so. For example: Rename/rename(1to2) conflicts (both sides
-+renamed the same file differently) will result in three different file
-+having higher order stages (but each only has one higher order stage),
-+with no way (short of the <Informational messages> section) to determine
-+which three files are related. File/directory conflicts also result in
-+a file with exactly one higher order stage.
++the <<CFI,Conflicted file info>> list. The information there is
++insufficient to do so. For example: Rename/rename(1to2) conflicts (both
++sides renamed the same file differently) will result in three different
++file having higher order stages (but each only has one higher order
++stage), with no way (short of the <<IM,Informational messages>> section)
++to determine which three files are related. File/directory conflicts
++also result in a file with exactly one higher order stage.
+Possibly-involved-in-directory-rename conflicts (when
+"merge.directoryRenames" is unset or set to "conflicts") also result in
+a file with exactly one higher order stage. In all cases, the
-+<Informational messages> section has the necessary info, though it is
-+not designed to be machine parseable.
++<<IM,Informational messages>> section has the necessary info, though it
++is not designed to be machine parseable.
+
-+Do NOT assume all filenames listed in the <Informational messages>
++Do NOT assume all filenames listed in the <<IM,Informational messages>>
+section had conflicts. Messages can be included for files that have no
+conflicts, such as "Auto-merging <file>".
+
-+AVOID taking the OIDS from the <Conflicted file info> and re-merging
-+them to present the conflicts to the user. This will lose information.
-+Instead, look up the version of the file found within the <OID of
-+toplevel tree> and show that instead. In particular, the latter will
-+have conflict markers annotated with the original branch/commit being
-+merged and, if renames were involved, the original filename. While you
-+could include the original branch/commit in the conflict marker
-+annotations when re-merging, the original filename is not available from
-+the <Conflicted file info> and thus you would be losing information that
-+might help the user resolve the conflict.
++AVOID taking the OIDS from the <<CFI,Conflicted file info>> and
++re-merging them to present the conflicts to the user. This will lose
++information. Instead, look up the version of the file found within the
++<<OIDTLT,OID of toplevel tree>> and show that instead. In particular,
++the latter will have conflict markers annotated with the original
++branch/commit being merged and, if renames were involved, the original
++filename. While you could include the original branch/commit in the
++conflict marker annotations when re-merging, the original filename is
++not available from the <<CFI,Conflicted file info>> and thus you would
++be losing information that might help the user resolve the conflict.
+
- GIT
- ---
- Part of the linkgit:git[1] suite
+ [[DEPMERGE]]
+ DEPRECATED DESCRIPTION
+ ----------------------
--
gitgitgadget
next prev parent reply other threads:[~2022-02-23 7:47 UTC|newest]
Thread overview: 240+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-22 21:55 [PATCH 00/12] RFC: In-core git merge-tree ("Server side merges") Elijah Newren via GitGitGadget
2022-01-22 21:55 ` [PATCH 01/12] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-01-22 21:55 ` [PATCH 02/12] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-01-22 21:55 ` [PATCH 03/12] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-01-23 8:05 ` René Scharfe
2022-01-24 16:43 ` Elijah Newren
2022-01-24 9:46 ` Ævar Arnfjörð Bjarmason
2022-01-24 16:54 ` Elijah Newren
2022-01-22 21:55 ` [PATCH 04/12] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-01-24 9:51 ` Ævar Arnfjörð Bjarmason
2022-01-24 17:12 ` Elijah Newren
2022-01-25 17:07 ` Johannes Schindelin
2022-01-26 9:44 ` Christian Couder
2022-01-29 4:09 ` Elijah Newren
2022-01-22 21:55 ` [PATCH 05/12] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-01-24 9:56 ` Ævar Arnfjörð Bjarmason
2022-01-25 1:59 ` Elijah Newren
2022-01-28 16:09 ` Johannes Schindelin
2022-01-22 21:55 ` [PATCH 06/12] merge-ort: allow update messages to be written to different file stream Elijah Newren via GitGitGadget
2022-01-28 16:31 ` Johannes Schindelin
2022-01-29 4:33 ` Elijah Newren
2022-01-22 21:55 ` [PATCH 07/12] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-01-26 10:42 ` Christian Couder
2022-01-29 4:52 ` Elijah Newren
2022-01-28 16:37 ` Johannes Schindelin
2022-01-29 4:46 ` Elijah Newren
2022-01-22 21:55 ` [PATCH 08/12] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-01-26 10:55 ` Christian Couder
2022-01-29 4:55 ` Elijah Newren
2022-01-26 11:07 ` Christian Couder
2022-01-29 5:06 ` Elijah Newren
2022-01-28 16:55 ` Johannes Schindelin
2022-01-29 6:08 ` Elijah Newren
2022-01-29 8:23 ` Johannes Sixt
2022-01-29 16:47 ` Elijah Newren
2022-02-04 23:10 ` Johannes Schindelin
2022-02-05 0:54 ` Elijah Newren
2022-02-21 10:46 ` Johannes Schindelin
2022-02-21 14:27 ` Ævar Arnfjörð Bjarmason
2022-02-21 14:28 ` machine-parsable git-merge-tree messages (was: [PATCH 08/12] merge-ort: provide a merge_get_conflicted_files() helper function) Ævar Arnfjörð Bjarmason
2022-02-23 4:00 ` Elijah Newren
2022-02-28 8:50 ` Ævar Arnfjörð Bjarmason
2022-03-01 3:49 ` Elijah Newren
2022-02-22 16:54 ` [PATCH 08/12] merge-ort: provide a merge_get_conflicted_files() helper function Johannes Schindelin
2022-02-23 3:13 ` Elijah Newren
2022-02-25 16:26 ` Johannes Schindelin
2022-02-23 2:15 ` Elijah Newren
2022-02-25 16:31 ` Johannes Schindelin
2022-02-25 18:40 ` Junio C Hamano
2022-02-26 6:53 ` Elijah Newren
2022-03-07 16:27 ` Johannes Schindelin
2022-03-08 8:25 ` Elijah Newren
2022-03-10 15:10 ` Johannes Schindelin
2022-05-13 10:21 ` Johannes Schindelin
2022-05-17 8:23 ` Elijah Newren
2022-06-03 22:11 ` Johannes Schindelin
2022-06-05 15:40 ` Johannes Schindelin
2022-06-05 22:42 ` Johannes Schindelin
2022-06-06 21:37 ` Johannes Schindelin
2022-06-07 7:38 ` Elijah Newren
2022-06-17 23:44 ` Elijah Newren
2022-06-18 21:58 ` Johannes Schindelin
2022-01-22 21:55 ` [PATCH 09/12] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-01-24 10:01 ` Ævar Arnfjörð Bjarmason
2022-01-24 17:18 ` Elijah Newren
2022-01-28 16:57 ` Johannes Schindelin
2022-01-29 6:21 ` Elijah Newren
2022-02-04 23:12 ` Johannes Schindelin
[not found] ` <CABPp-BFyaakDSjHULpBRPQqq_jz2keyufHo1MjNS6dHQNR+JLQ@mail.gmail.com>
2022-02-21 9:31 ` Johannes Schindelin
2022-01-22 21:56 ` [PATCH 10/12] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-01-24 10:06 ` Ævar Arnfjörð Bjarmason
2022-01-24 17:30 ` Elijah Newren
2022-01-22 21:56 ` [PATCH 11/12] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-01-22 21:56 ` [PATCH 12/12] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-01-26 8:48 ` [PATCH 00/12] RFC: In-core git merge-tree ("Server side merges") Christian Couder
2022-01-26 12:02 ` Johannes Schindelin
2022-01-26 14:44 ` Christian Couder
2022-01-28 12:58 ` Johannes Schindelin
2022-01-28 13:37 ` Christian Couder
2022-01-28 16:05 ` Johannes Schindelin
2022-01-29 7:03 ` Elijah Newren
2022-01-29 8:17 ` Christian Couder
2022-01-29 17:43 ` Elijah Newren
2022-01-31 17:45 ` Elijah Newren
2022-01-28 17:00 ` Johannes Schindelin
2022-01-29 18:07 ` [PATCH v2 00/13] " Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 01/13] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 02/13] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 03/13] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-02-02 21:30 ` Junio C Hamano
2022-01-29 18:07 ` [PATCH v2 04/13] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-02-02 21:30 ` Junio C Hamano
2022-02-02 22:00 ` Elijah Newren
2022-02-21 8:40 ` Johannes Schindelin
2022-01-29 18:07 ` [PATCH v2 05/13] diff: allow diff_warn_rename_limit to write somewhere besides stdout Johannes Schindelin via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 06/13] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 07/13] merge-ort: allow update messages to be written to different file stream Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 08/13] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-02-02 21:30 ` Junio C Hamano
2022-02-02 23:09 ` Elijah Newren
2022-01-29 18:07 ` [PATCH v2 09/13] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 10/13] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-02-02 21:32 ` Junio C Hamano
2022-02-02 21:32 ` Junio C Hamano
2022-02-03 23:55 ` Junio C Hamano
2022-01-29 18:07 ` [PATCH v2 11/13] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-02-02 21:32 ` Junio C Hamano
2022-02-02 23:18 ` Elijah Newren
2022-02-03 1:08 ` Ævar Arnfjörð Bjarmason
2022-02-03 8:39 ` Elijah Newren
2022-01-29 18:07 ` [PATCH v2 12/13] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-02-02 21:32 ` Junio C Hamano
2022-01-29 18:07 ` [PATCH v2 13/13] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 00/15] In-core git merge-tree ("Server side merges") Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 01/15] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 02/15] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 03/15] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-02-03 2:05 ` Ævar Arnfjörð Bjarmason
2022-02-03 9:04 ` Elijah Newren
2022-02-03 9:22 ` Elijah Newren
2022-02-03 9:45 ` Ævar Arnfjörð Bjarmason
2022-02-03 16:20 ` Elijah Newren
2022-02-03 17:15 ` Ævar Arnfjörð Bjarmason
2022-02-03 18:18 ` Elijah Newren
2022-02-03 10:26 ` Ævar Arnfjörð Bjarmason
2022-02-07 22:41 ` Emily Shaffer
2022-02-07 23:36 ` Junio C Hamano
2022-02-02 7:34 ` [PATCH v3 04/15] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-02-02 21:22 ` Junio C Hamano
2022-02-02 21:56 ` Elijah Newren
2022-02-02 22:01 ` Junio C Hamano
2022-02-03 0:18 ` Elijah Newren
2022-02-03 10:42 ` Johannes Altmanninger
2022-02-03 16:54 ` Elijah Newren
2022-02-21 9:06 ` Johannes Schindelin
2022-02-22 2:37 ` Elijah Newren
2022-02-03 20:05 ` Junio C Hamano
2022-02-21 18:55 ` Junio C Hamano
2022-02-22 16:26 ` Elijah Newren
2022-02-23 20:07 ` Junio C Hamano
2022-02-24 2:22 ` Elijah Newren
2022-02-24 20:04 ` Junio C Hamano
2022-02-24 23:36 ` Junio C Hamano
2022-02-27 17:35 ` Johannes Altmanninger
2022-02-27 17:35 ` Johannes Altmanninger
2022-02-22 16:45 ` Johannes Schindelin
2022-02-04 4:48 ` Josh Steadmon
2022-02-04 6:08 ` Elijah Newren
2022-02-02 7:34 ` [PATCH v3 05/15] Introduce a variant of the `warning()` function that takes a `FILE *` Johannes Schindelin via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 06/15] diff: allow diff_warn_rename_limit to write somewhere besides stderr Johannes Schindelin via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 07/15] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 08/15] merge-ort: allow update messages to be written to different file stream Elijah Newren via GitGitGadget
2022-02-03 1:48 ` Ævar Arnfjörð Bjarmason
2022-02-03 9:12 ` Elijah Newren
2022-02-03 10:01 ` Ævar Arnfjörð Bjarmason
2022-02-03 16:09 ` Elijah Newren
2022-02-03 16:19 ` Ævar Arnfjörð Bjarmason
2022-02-03 17:00 ` Elijah Newren
2022-02-21 9:13 ` Johannes Schindelin
2022-02-22 1:54 ` Elijah Newren
2022-02-22 16:48 ` Johannes Schindelin
2022-02-02 7:34 ` [PATCH v3 09/15] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 10/15] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 11/15] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 12/15] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-02-02 23:55 ` Ævar Arnfjörð Bjarmason
2022-02-03 5:19 ` Elijah Newren
2022-02-02 7:34 ` [PATCH v3 13/15] merge-tree: allow `ls-files -u` style info to be NUL terminated Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 14/15] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 15/15] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 00/12] In-core git merge-tree ("Server side merges") Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 01/12] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 02/12] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 03/12] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 04/12] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-02-14 17:51 ` Junio C Hamano
2022-02-15 6:03 ` Elijah Newren
2022-02-15 8:46 ` Ævar Arnfjörð Bjarmason
2022-02-12 20:34 ` [PATCH v4 05/12] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 06/12] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 07/12] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 08/12] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 09/12] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 10/12] merge-tree: allow `ls-files -u` style info to be NUL terminated Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 11/12] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 12/12] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 00/12] In-core git merge-tree ("Server side merges") Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 01/12] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 02/12] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 03/12] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 04/12] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-02-20 9:03 ` René Scharfe
2022-02-21 9:25 ` Johannes Schindelin
2022-02-22 2:28 ` Elijah Newren
2022-02-22 16:25 ` Johannes Schindelin
2022-02-20 6:54 ` [PATCH v5 05/12] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 06/12] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 07/12] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 08/12] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 09/12] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 10/12] merge-tree: allow `ls-files -u` style info to be NUL terminated Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 11/12] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 12/12] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-02-22 16:26 ` Johannes Schindelin
2022-02-20 10:23 ` [PATCH v5 00/12] In-core git merge-tree ("Server side merges") Ævar Arnfjörð Bjarmason
2022-02-21 9:16 ` Johannes Schindelin
2022-02-22 2:08 ` Elijah Newren
2022-02-22 10:07 ` Ævar Arnfjörð Bjarmason
2022-02-23 7:46 ` Elijah Newren via GitGitGadget [this message]
2022-02-23 7:46 ` [PATCH v6 01/12] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 02/12] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 03/12] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 04/12] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 05/12] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 06/12] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 07/12] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 08/12] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 09/12] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 10/12] merge-tree: allow `ls-files -u` style info to be NUL terminated Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 11/12] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 12/12] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-02-23 23:13 ` [PATCH v6 00/12] In-core git merge-tree ("Server side merges") Junio C Hamano
2022-06-18 0:20 ` [PATCH v7 00/17] " Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 01/17] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 02/17] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 03/17] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 04/17] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 05/17] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 06/17] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 07/17] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 08/17] merge-ort: remove command-line-centric submodule message from merge-ort Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 09/17] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 10/17] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 11/17] merge-ort: store messages in a list, not in a single strbuf Johannes Schindelin via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 12/17] merge-ort: make `path_messages` a strmap to a string_list Johannes Schindelin via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 13/17] merge-ort: store more specific conflict information Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 14/17] merge-ort: optionally produce machine-readable output Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 15/17] merge-tree: allow `ls-files -u` style info to be NUL terminated Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 16/17] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-06-18 0:21 ` [PATCH v7 17/17] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.1122.v6.git.1645602413.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=aclopte@gmail.com \
--cc=avarab@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=christian.couder@gmail.com \
--cc=emilyshaffer@google.com \
--cc=git@vger.kernel.org \
--cc=j6t@kdbg.org \
--cc=l.s.r@web.de \
--cc=me@ttaylorr.com \
--cc=newren@gmail.com \
--cc=ramsay@ramsayjones.plus.com \
--cc=steadmon@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).