Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

merge-ort: make informational messages from recursive merges clearer #1121

Closed
wants to merge 1 commit into from

Conversation

newren
Copy link

@newren newren commented Jan 22, 2022

Sorry for any confusion caused by this bug (though I'm surprised no one else reported it).

cc: Elijah Newren newren@gmail.com

This is another simple change with a long explanation...

merge-recursive and merge-ort are both based on the same recursive idea:
if there is more than one merge base, merge the merge bases (which may
require first merging the merge bases of the merges bases, etc.).  The
depth of the inner merge is recorded via a variable called "call_depth",
which we'll bring up again later.  Naturally, the inner merges
themselves can have conflicts and various messages generated about those
files.

merge-recursive immediately prints to stdout as it goes, at the risk of
printing multiple conflict notices for the same path separated far apart
from each other with many intervenining conflict notices for other paths
between them.  And this is true even if there are no inner merges
involved.  An example of this was given in [1] and apparently caused
some confusion:

    CONFLICT (rename/add): Rename A->B in HEAD. B added in otherbranch
    ...dozens of conflicts for OTHER paths...
    CONFLICT (content): Merge conflicts in B

In contrast, merge-ort collects messages and stores them by path so that
it can print them grouped by path.  Thus, the same case handled by
merge-ort would have output of the form:

    CONFLICT (rename/add): Rename A->B in HEAD. B added in otherbranch
    CONFLICT (content): Merge conflicts in B
    ...dozens of conflicts for OTHER paths...

This is generally helpful, but does make a separate bug more
problematic.  In particular, while merge-recursive might report the
following for a recursive merge:

      Auto-merging dir.c
      Auto-merging midx.c
      CONFLICT (content): Merge conflict in midx.c
    Auto-merging diff.c
    Auto-merging dir.c
    CONFLICT (content): Merge conflict in dir.c

merge-ort would instead report:

    Auto-merging diff.c
    Auto-merging dir.c
    Auto-merging dir.c
    CONFLICT (content): Merge conflict in dir.c
    Auto-merging midx.c
    CONFLICT (content): Merge conflict in midx.c

The fact that messages for the same file are together is probably
helpful in general, but with the indentation missing for the inner
merge it unfortunately serves to confuse.  This probably would lead
users to wonder:

  * Why is Git reporting that "dir.c" is being merged twice?
  * If midx.c has conflicts, why do I not see any when I open up the
    file and why are no conflicts shown in the index?

Fix this output confusion by changing the output to clearly
differentiate the messages for outer merges from the ones for inner
merges, changing the above output from merge-ort to:

    Auto-merging diff.c
      From inner merge:  Auto-merging dir.c
    Auto-merging dir.c
    CONFLICT (content): Merge conflict in dir.c
      From inner merge:  Auto-merging midx.c
      From inner merge:  CONFLICT (content): Merge conflict in midx.c

(Note: the number of spaces after the 'From inner merge:' is
2*call_depth).

One other thing to note here, that I didn't notice until typing up this
commit message, is that merge-recursive does not print any messages from
the inner merges by default; the extra verbosity has to be requested.
merge-ort currently has no verbosity controls and always prints these.
We may also want to change that, but for now, just make the output
clearer with these extra markings and indentation.

[1] https://lore.kernel.org/git/CAGyf7-He4in8JWUh9dpAwvoPkQz9hr8nCBpxOxhZEd8+jtqTpg@mail.gmail.com/

Signed-off-by: Elijah Newren <newren@gmail.com>
@newren newren changed the base branch from temporary/base-merge-ort-clearer to master February 17, 2022 05:19
@newren
Copy link
Author

newren commented Feb 17, 2022

/submit

@gitgitgadget
Copy link

gitgitgadget bot commented Feb 17, 2022

Submitted as pull.1121.git.1645079923090.gitgitgadget@gmail.com

To fetch this version into FETCH_HEAD:

git fetch https://github.com/gitgitgadget/git/ pr-1121/newren/merge-ort-clearer-v1

To fetch this version to local tag pr-1121/newren/merge-ort-clearer-v1:

git fetch --no-tags https://github.com/gitgitgadget/git/ tag pr-1121/newren/merge-ort-clearer-v1

@gitgitgadget
Copy link

gitgitgadget bot commented Feb 17, 2022

On the Git mailing list, Junio C Hamano wrote (reply to this):

"Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Elijah Newren <newren@gmail.com>
>
> This is another simple change with a long explanation...
>
> merge-recursive and merge-ort are both based on the same recursive idea:
> if there is more than one merge base, merge the merge bases (which may
> require first merging the merge bases of the merges bases, etc.).  The
> depth of the inner merge is recorded via a variable called "call_depth",
> which we'll bring up again later.  Naturally, the inner merges
> themselves can have conflicts and various messages generated about those
> files.
>
> merge-recursive immediately prints to stdout as it goes, at the risk of
> printing multiple conflict notices for the same path separated far apart
> from each other with many intervenining conflict notices for other paths
> between them.  And this is true even if there are no inner merges
> involved.  An example of this was given in [1] and apparently caused
> some confusion:
>
>     CONFLICT (rename/add): Rename A->B in HEAD. B added in otherbranch
>     ...dozens of conflicts for OTHER paths...
>     CONFLICT (content): Merge conflicts in B
>
> In contrast, merge-ort collects messages and stores them by path so that
> it can print them grouped by path.  Thus, the same case handled by
> merge-ort would have output of the form:
>
>     CONFLICT (rename/add): Rename A->B in HEAD. B added in otherbranch
>     CONFLICT (content): Merge conflicts in B
>     ...dozens of conflicts for OTHER paths...
>
> This is generally helpful, but does make a separate bug more
> problematic.  In particular, while merge-recursive might report the
> following for a recursive merge:
>
>       Auto-merging dir.c
>       Auto-merging midx.c
>       CONFLICT (content): Merge conflict in midx.c
>     Auto-merging diff.c
>     Auto-merging dir.c
>     CONFLICT (content): Merge conflict in dir.c
>
> merge-ort would instead report:
>
>     Auto-merging diff.c
>     Auto-merging dir.c
>     Auto-merging dir.c
>     CONFLICT (content): Merge conflict in dir.c
>     Auto-merging midx.c
>     CONFLICT (content): Merge conflict in midx.c
>
> The fact that messages for the same file are together is probably
> helpful in general, but with the indentation missing for the inner
> merge it unfortunately serves to confuse.  This probably would lead
> users to wonder:
>
>   * Why is Git reporting that "dir.c" is being merged twice?
>   * If midx.c has conflicts, why do I not see any when I open up the
>     file and why are no conflicts shown in the index?
>
> Fix this output confusion by changing the output to clearly
> differentiate the messages for outer merges from the ones for inner
> merges, changing the above output from merge-ort to:
>
>     Auto-merging diff.c
>       From inner merge:  Auto-merging dir.c
>     Auto-merging dir.c
>     CONFLICT (content): Merge conflict in dir.c
>       From inner merge:  Auto-merging midx.c
>       From inner merge:  CONFLICT (content): Merge conflict in midx.c
>
> (Note: the number of spaces after the 'From inner merge:' is
> 2*call_depth).

So "From inner merge: " label is what we get extra, compared to the
recursive one that just gives deeper leading-space indentation?

> One other thing to note here, that I didn't notice until typing up this
> commit message, is that merge-recursive does not print any messages from
> the inner merges by default; the extra verbosity has to be requested.
> merge-ort currently has no verbosity controls and always prints these.
> We may also want to change that, but for now, just make the output
> clearer with these extra markings and indentation.

Yup, I found that the messages on inner conflicts, especially when
they "cancel out" at the outer merge, are mostly noise that carries
very little useful information (by being noisy, the user gets a sense
of how complex the histories being merged are).  Reducing the default
messaging level would probably be a good idea.

> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1121%2Fnewren%2Fmerge-ort-clearer-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1121/newren/merge-ort-clearer-v1
> Pull-Request: https://github.com/gitgitgadget/git/pull/1121
>
>  merge-ort.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/merge-ort.c b/merge-ort.c
> index d85b1cd99e9..55decb2587e 100644
> --- a/merge-ort.c
> +++ b/merge-ort.c
> @@ -651,6 +651,11 @@ static void path_msg(struct merge_options *opt,
>  	dest = (opt->record_conflict_msgs_as_headers ? &tmp : sb);
>  
>  	va_start(ap, fmt);
> +	if (opt->priv->call_depth) {
> +		strbuf_addchars(dest, ' ', 2);
> +		strbuf_addstr(dest, "From inner merge:");
> +		strbuf_addchars(dest, ' ', opt->priv->call_depth * 2);

I am unsure if the long label adds much value, but I am perfectly OK
tostart from more verbose and see if people complain (or not).  This
is for human consumption and not meant to be machine parseable so we
can iterate.

Will queue.  Thanks.

@gitgitgadget
Copy link

gitgitgadget bot commented Feb 18, 2022

This branch is now known as en/ort-inner-merge-conflict-report.

@gitgitgadget
Copy link

gitgitgadget bot commented Feb 18, 2022

This patch series was integrated into seen via git@9743003.

@gitgitgadget gitgitgadget bot added the seen label Feb 18, 2022
@gitgitgadget
Copy link

gitgitgadget bot commented Feb 18, 2022

This patch series was integrated into seen via git@457db35.

@gitgitgadget
Copy link

gitgitgadget bot commented Feb 18, 2022

There was a status update in the "New Topics" section about the branch en/ort-inner-merge-conflict-report on the Git mailing list:

Messages "ort" merge backend prepares while dealing with conflicted
paths were unnecessarily confusing since it did not differentiate
inner merges and outer merges.

Will merge to 'next'.
source: <pull.1121.git.1645079923090.gitgitgadget@gmail.com>

@gitgitgadget
Copy link

gitgitgadget bot commented Feb 18, 2022

This patch series was integrated into seen via git@f477cb8.

@gitgitgadget
Copy link

gitgitgadget bot commented Feb 18, 2022

This patch series was integrated into next via git@367dd32.

@gitgitgadget gitgitgadget bot added the next label Feb 18, 2022
@gitgitgadget
Copy link

gitgitgadget bot commented Feb 21, 2022

This patch series was integrated into seen via git@b2720f3.

@gitgitgadget
Copy link

gitgitgadget bot commented Feb 24, 2022

This patch series was integrated into seen via git@353f145.

@gitgitgadget
Copy link

gitgitgadget bot commented Feb 24, 2022

There was a status update in the "Cooking" section about the branch en/ort-inner-merge-conflict-report on the Git mailing list:

Messages "ort" merge backend prepares while dealing with conflicted
paths were unnecessarily confusing since it did not differentiate
inner merges and outer merges.

Will merge to 'master'.
source: <pull.1121.git.1645079923090.gitgitgadget@gmail.com>

@gitgitgadget
Copy link

gitgitgadget bot commented Feb 26, 2022

This patch series was integrated into seen via git@b3db182.

@gitgitgadget
Copy link

gitgitgadget bot commented Feb 26, 2022

This patch series was integrated into master via git@b3db182.

@gitgitgadget gitgitgadget bot added the master label Feb 26, 2022
@gitgitgadget gitgitgadget bot closed this Feb 26, 2022
@gitgitgadget
Copy link

gitgitgadget bot commented Feb 26, 2022

Closed via b3db182.

@gitgitgadget
Copy link

gitgitgadget bot commented Mar 1, 2022

On the Git mailing list, Junio C Hamano wrote (reply to this):

Junio C Hamano <gitster@pobox.com> writes:

>> One other thing to note here, that I didn't notice until typing up this
>> commit message, is that merge-recursive does not print any messages from
>> the inner merges by default; the extra verbosity has to be requested.
>> merge-ort currently has no verbosity controls and always prints these.
>> We may also want to change that, but for now, just make the output
>> clearer with these extra markings and indentation.
>
> Yup, I found that the messages on inner conflicts, especially when
> they "cancel out" at the outer merge, are mostly noise that carries
> very little useful information (by being noisy, the user gets a sense
> of how complex the histories being merged are).  Reducing the default
> messaging level would probably be a good idea.

Here is what I just had to scroll through to update 'next' by
merging back 'master', only to grab the updates to the release
notes.  Needless to say, this would have been somewhat baffling
if I didn't know to expect it.

It would be good to squelch it before we hear another complaints
from old-timer power users ;-)

$ git merge -m 'Sync with master' --no-log master
  From inner merge:  Auto-merging blame.c
  From inner merge:  Auto-merging builtin/am.c
  From inner merge:  Auto-merging builtin/blame.c
  From inner merge:  Auto-merging builtin/clone.c
  From inner merge:  Auto-merging builtin/clone.c
  From inner merge:  Auto-merging builtin/commit.c
  From inner merge:  Auto-merging builtin/fetch.c
  From inner merge:  Auto-merging builtin/fetch.c
  From inner merge:  Auto-merging builtin/grep.c
  From inner merge:  Auto-merging builtin/hash-object.c
  From inner merge:  Auto-merging builtin/log.c
  From inner merge:  Auto-merging builtin/log.c
  From inner merge:  Auto-merging builtin/pack-objects.c
  From inner merge:  Auto-merging builtin/pull.c
  From inner merge:  Auto-merging builtin/pull.c
  From inner merge:  Auto-merging builtin/rebase.c
  From inner merge:  Auto-merging builtin/rebase.c
  From inner merge:  Auto-merging builtin/reflog.c
  From inner merge:  CONFLICT (content): Merge conflict in builtin/reflog.c
Auto-merging builtin/reflog.c
  From inner merge:  Auto-merging builtin/reset.c
  From inner merge:  Auto-merging builtin/sparse-checkout.c
  From inner merge:  Auto-merging builtin/sparse-checkout.c
  From inner merge:  Auto-merging builtin/submodule--helper.c
  From inner merge:  Auto-merging builtin/submodule--helper.c
  From inner merge:  CONFLICT (content): Merge conflict in builtin/submodule--helper.c
Auto-merging builtin/submodule--helper.c
  From inner merge:  Auto-merging builtin/worktree.c
  From inner merge:  Auto-merging cache.h
  From inner merge:  Auto-merging config.c
  From inner merge:  Auto-merging config.h
  From inner merge:  Auto-merging diff-merges.c
  From inner merge:  Auto-merging diff.c
  From inner merge:  Auto-merging git.c
  From inner merge:  Auto-merging gpg-interface.c
  From inner merge:  Auto-merging grep.c
  From inner merge:  Auto-merging grep.c
  From inner merge:  Auto-merging notes-merge.c
  From inner merge:  Auto-merging object-name.c
  From inner merge:  Auto-merging pack-bitmap-write.c
  From inner merge:  Auto-merging parse-options.c
  From inner merge:  CONFLICT (content): Merge conflict in parse-options.c
  From inner merge:  Auto-merging parse-options.h
  From inner merge:  CONFLICT (content): Merge conflict in parse-options.h
  From inner merge:  Auto-merging refs.c
  From inner merge:  Auto-merging revision.c
  From inner merge:  Auto-merging sequencer.c
  From inner merge:  Auto-merging sequencer.c
  From inner merge:  Auto-merging sparse-index.c
  From inner merge:  Auto-merging submodule-config.c
  From inner merge:  Auto-merging t/t1091-sparse-checkout-builtin.sh
  From inner merge:  CONFLICT (content): Merge conflict in t/t1091-sparse-checkout-builtin.sh
Auto-merging t/t1091-sparse-checkout-builtin.sh
  From inner merge:  Auto-merging t/t1512-rev-parse-disambiguation.sh
  From inner merge:  Auto-merging t/t4202-log.sh
  From inner merge:  Auto-merging t/t4202-log.sh
  From inner merge:    Auto-merging t/t4202-log.sh
  From inner merge:  Auto-merging t/t4202-log.sh
  From inner merge:  Auto-merging t/t4202-log.sh
  From inner merge:  Auto-merging t/t5316-pack-delta-depth.sh
  From inner merge:  Auto-merging t/t6120-describe.sh
  From inner merge:    Auto-merging t/t6120-describe.sh
  From inner merge:  Auto-merging worktree.c
Merge made by the 'ort' strategy.
 Documentation/RelNotes/2.36.0.txt | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)


@gitgitgadget
Copy link

gitgitgadget bot commented Mar 2, 2022

On the Git mailing list, Elijah Newren wrote (reply to this):

On Mon, Feb 28, 2022 at 10:44 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> Junio C Hamano <gitster@pobox.com> writes:
>
> >> One other thing to note here, that I didn't notice until typing up this
> >> commit message, is that merge-recursive does not print any messages from
> >> the inner merges by default; the extra verbosity has to be requested.
> >> merge-ort currently has no verbosity controls and always prints these.
> >> We may also want to change that, but for now, just make the output
> >> clearer with these extra markings and indentation.
> >
> > Yup, I found that the messages on inner conflicts, especially when
> > they "cancel out" at the outer merge, are mostly noise that carries
> > very little useful information (by being noisy, the user gets a sense
> > of how complex the histories being merged are).  Reducing the default
> > messaging level would probably be a good idea.
>
> Here is what I just had to scroll through to update 'next' by
> merging back 'master', only to grab the updates to the release
> notes.  Needless to say, this would have been somewhat baffling
> if I didn't know to expect it.
>
> It would be good to squelch it before we hear another complaints
> from old-timer power users ;-)

I'll submit a patch soon.

>
> $ git merge -m 'Sync with master' --no-log master
>   From inner merge:  Auto-merging blame.c
>   From inner merge:  Auto-merging builtin/am.c
>   From inner merge:  Auto-merging builtin/blame.c
>   From inner merge:  Auto-merging builtin/clone.c
>   From inner merge:  Auto-merging builtin/clone.c
>   From inner merge:  Auto-merging builtin/commit.c
>   From inner merge:  Auto-merging builtin/fetch.c
>   From inner merge:  Auto-merging builtin/fetch.c
>   From inner merge:  Auto-merging builtin/grep.c
>   From inner merge:  Auto-merging builtin/hash-object.c
>   From inner merge:  Auto-merging builtin/log.c
>   From inner merge:  Auto-merging builtin/log.c
>   From inner merge:  Auto-merging builtin/pack-objects.c
>   From inner merge:  Auto-merging builtin/pull.c
>   From inner merge:  Auto-merging builtin/pull.c
>   From inner merge:  Auto-merging builtin/rebase.c
>   From inner merge:  Auto-merging builtin/rebase.c
>   From inner merge:  Auto-merging builtin/reflog.c
>   From inner merge:  CONFLICT (content): Merge conflict in builtin/reflog.c
> Auto-merging builtin/reflog.c
>   From inner merge:  Auto-merging builtin/reset.c
>   From inner merge:  Auto-merging builtin/sparse-checkout.c
>   From inner merge:  Auto-merging builtin/sparse-checkout.c
>   From inner merge:  Auto-merging builtin/submodule--helper.c
>   From inner merge:  Auto-merging builtin/submodule--helper.c
>   From inner merge:  CONFLICT (content): Merge conflict in builtin/submodule--helper.c
> Auto-merging builtin/submodule--helper.c
>   From inner merge:  Auto-merging builtin/worktree.c
>   From inner merge:  Auto-merging cache.h
>   From inner merge:  Auto-merging config.c
>   From inner merge:  Auto-merging config.h
>   From inner merge:  Auto-merging diff-merges.c
>   From inner merge:  Auto-merging diff.c
>   From inner merge:  Auto-merging git.c
>   From inner merge:  Auto-merging gpg-interface.c
>   From inner merge:  Auto-merging grep.c
>   From inner merge:  Auto-merging grep.c
>   From inner merge:  Auto-merging notes-merge.c
>   From inner merge:  Auto-merging object-name.c
>   From inner merge:  Auto-merging pack-bitmap-write.c
>   From inner merge:  Auto-merging parse-options.c
>   From inner merge:  CONFLICT (content): Merge conflict in parse-options.c
>   From inner merge:  Auto-merging parse-options.h
>   From inner merge:  CONFLICT (content): Merge conflict in parse-options.h
>   From inner merge:  Auto-merging refs.c
>   From inner merge:  Auto-merging revision.c
>   From inner merge:  Auto-merging sequencer.c
>   From inner merge:  Auto-merging sequencer.c
>   From inner merge:  Auto-merging sparse-index.c
>   From inner merge:  Auto-merging submodule-config.c
>   From inner merge:  Auto-merging t/t1091-sparse-checkout-builtin.sh
>   From inner merge:  CONFLICT (content): Merge conflict in t/t1091-sparse-checkout-builtin.sh
> Auto-merging t/t1091-sparse-checkout-builtin.sh
>   From inner merge:  Auto-merging t/t1512-rev-parse-disambiguation.sh
>   From inner merge:  Auto-merging t/t4202-log.sh
>   From inner merge:  Auto-merging t/t4202-log.sh
>   From inner merge:    Auto-merging t/t4202-log.sh
>   From inner merge:  Auto-merging t/t4202-log.sh
>   From inner merge:  Auto-merging t/t4202-log.sh
>   From inner merge:  Auto-merging t/t5316-pack-delta-depth.sh
>   From inner merge:  Auto-merging t/t6120-describe.sh
>   From inner merge:    Auto-merging t/t6120-describe.sh
>   From inner merge:  Auto-merging worktree.c
> Merge made by the 'ort' strategy.
>  Documentation/RelNotes/2.36.0.txt | 29 +++++++++++++++++++++++++++++
>  1 file changed, 29 insertions(+)
>
>

@gitgitgadget
Copy link

gitgitgadget bot commented Mar 2, 2022

User Elijah Newren <newren@gmail.com> has been added to the cc: list.

@newren newren deleted the merge-ort-clearer branch March 2, 2022 04:23
@gitgitgadget
Copy link

gitgitgadget bot commented Mar 2, 2022

On the Git mailing list, Elijah Newren wrote (reply to this):

On Tue, Mar 1, 2022 at 6:32 PM Elijah Newren <newren@gmail.com> wrote:
>
> On Mon, Feb 28, 2022 at 10:44 PM Junio C Hamano <gitster@pobox.com> wrote:
> >
> > Junio C Hamano <gitster@pobox.com> writes:
> >
> > >> One other thing to note here, that I didn't notice until typing up this
> > >> commit message, is that merge-recursive does not print any messages from
> > >> the inner merges by default; the extra verbosity has to be requested.
> > >> merge-ort currently has no verbosity controls and always prints these.
> > >> We may also want to change that, but for now, just make the output
> > >> clearer with these extra markings and indentation.
> > >
> > > Yup, I found that the messages on inner conflicts, especially when
> > > they "cancel out" at the outer merge, are mostly noise that carries
> > > very little useful information (by being noisy, the user gets a sense
> > > of how complex the histories being merged are).  Reducing the default
> > > messaging level would probably be a good idea.
> >
> > Here is what I just had to scroll through to update 'next' by
> > merging back 'master', only to grab the updates to the release
> > notes.  Needless to say, this would have been somewhat baffling
> > if I didn't know to expect it.
> >
> > It would be good to squelch it before we hear another complaints
> > from old-timer power users ;-)
>
> I'll submit a patch soon.

https://lore.kernel.org/git/pull.1167.git.1646194761463.gitgitgadget@gmail.com/,
which would drop all the "From inner merge:" lines below.

>
> >
> > $ git merge -m 'Sync with master' --no-log master
> >   From inner merge:  Auto-merging blame.c
> >   From inner merge:  Auto-merging builtin/am.c
> >   From inner merge:  Auto-merging builtin/blame.c
> >   From inner merge:  Auto-merging builtin/clone.c
> >   From inner merge:  Auto-merging builtin/clone.c
> >   From inner merge:  Auto-merging builtin/commit.c
> >   From inner merge:  Auto-merging builtin/fetch.c
> >   From inner merge:  Auto-merging builtin/fetch.c
> >   From inner merge:  Auto-merging builtin/grep.c
> >   From inner merge:  Auto-merging builtin/hash-object.c
> >   From inner merge:  Auto-merging builtin/log.c
> >   From inner merge:  Auto-merging builtin/log.c
> >   From inner merge:  Auto-merging builtin/pack-objects.c
> >   From inner merge:  Auto-merging builtin/pull.c
> >   From inner merge:  Auto-merging builtin/pull.c
> >   From inner merge:  Auto-merging builtin/rebase.c
> >   From inner merge:  Auto-merging builtin/rebase.c
> >   From inner merge:  Auto-merging builtin/reflog.c
> >   From inner merge:  CONFLICT (content): Merge conflict in builtin/reflog.c
> > Auto-merging builtin/reflog.c
> >   From inner merge:  Auto-merging builtin/reset.c
> >   From inner merge:  Auto-merging builtin/sparse-checkout.c
> >   From inner merge:  Auto-merging builtin/sparse-checkout.c
> >   From inner merge:  Auto-merging builtin/submodule--helper.c
> >   From inner merge:  Auto-merging builtin/submodule--helper.c
> >   From inner merge:  CONFLICT (content): Merge conflict in builtin/submodule--helper.c
> > Auto-merging builtin/submodule--helper.c
> >   From inner merge:  Auto-merging builtin/worktree.c
> >   From inner merge:  Auto-merging cache.h
> >   From inner merge:  Auto-merging config.c
> >   From inner merge:  Auto-merging config.h
> >   From inner merge:  Auto-merging diff-merges.c
> >   From inner merge:  Auto-merging diff.c
> >   From inner merge:  Auto-merging git.c
> >   From inner merge:  Auto-merging gpg-interface.c
> >   From inner merge:  Auto-merging grep.c
> >   From inner merge:  Auto-merging grep.c
> >   From inner merge:  Auto-merging notes-merge.c
> >   From inner merge:  Auto-merging object-name.c
> >   From inner merge:  Auto-merging pack-bitmap-write.c
> >   From inner merge:  Auto-merging parse-options.c
> >   From inner merge:  CONFLICT (content): Merge conflict in parse-options.c
> >   From inner merge:  Auto-merging parse-options.h
> >   From inner merge:  CONFLICT (content): Merge conflict in parse-options.h
> >   From inner merge:  Auto-merging refs.c
> >   From inner merge:  Auto-merging revision.c
> >   From inner merge:  Auto-merging sequencer.c
> >   From inner merge:  Auto-merging sequencer.c
> >   From inner merge:  Auto-merging sparse-index.c
> >   From inner merge:  Auto-merging submodule-config.c
> >   From inner merge:  Auto-merging t/t1091-sparse-checkout-builtin.sh
> >   From inner merge:  CONFLICT (content): Merge conflict in t/t1091-sparse-checkout-builtin.sh
> > Auto-merging t/t1091-sparse-checkout-builtin.sh
> >   From inner merge:  Auto-merging t/t1512-rev-parse-disambiguation.sh
> >   From inner merge:  Auto-merging t/t4202-log.sh
> >   From inner merge:  Auto-merging t/t4202-log.sh
> >   From inner merge:    Auto-merging t/t4202-log.sh
> >   From inner merge:  Auto-merging t/t4202-log.sh
> >   From inner merge:  Auto-merging t/t4202-log.sh
> >   From inner merge:  Auto-merging t/t5316-pack-delta-depth.sh
> >   From inner merge:  Auto-merging t/t6120-describe.sh
> >   From inner merge:    Auto-merging t/t6120-describe.sh
> >   From inner merge:  Auto-merging worktree.c
> > Merge made by the 'ort' strategy.
> >  Documentation/RelNotes/2.36.0.txt | 29 +++++++++++++++++++++++++++++
> >  1 file changed, 29 insertions(+)
> >
> >

@gitgitgadget
Copy link

gitgitgadget bot commented Mar 2, 2022

On the Git mailing list, Junio C Hamano wrote (reply to this):

Elijah Newren <newren@gmail.com> writes:

>> > Yup, I found that the messages on inner conflicts, especially when
>> > they "cancel out" at the outer merge, are mostly noise that carries
>> > very little useful information (by being noisy, the user gets a sense
>> > of how complex the histories being merged are).  Reducing the default
>> > messaging level would probably be a good idea.
>>
>> Here is what I just had to scroll through to update 'next' by
>> merging back 'master', only to grab the updates to the release
>> notes.  Needless to say, this would have been somewhat baffling
>> if I didn't know to expect it.
>>
>> It would be good to squelch it before we hear another complaints
>> from old-timer power users ;-)
>
> I'll submit a patch soon.
>
>>
>> $ git merge -m 'Sync with master' --no-log master
>>   From inner merge:  Auto-merging blame.c
>>   From inner merge:  Auto-merging builtin/am.c
>>   From inner merge:  Auto-merging builtin/blame.c
>>   From inner merge:  Auto-merging builtin/clone.c
>>   From inner merge:  Auto-merging builtin/clone.c
>>   From inner merge:  Auto-merging builtin/commit.c
>>   From inner merge:  Auto-merging builtin/fetch.c
>>   From inner merge:  Auto-merging builtin/fetch.c
>>   From inner merge:  Auto-merging builtin/grep.c
>>   From inner merge:  Auto-merging builtin/hash-object.c
>>   From inner merge:  Auto-merging builtin/log.c
>>   From inner merge:  Auto-merging builtin/log.c
>>   From inner merge:  Auto-merging builtin/pack-objects.c
>>   From inner merge:  Auto-merging builtin/pull.c
>>   From inner merge:  Auto-merging builtin/pull.c
>>   From inner merge:  Auto-merging builtin/rebase.c
>>   From inner merge:  Auto-merging builtin/rebase.c
>>   From inner merge:  Auto-merging builtin/reflog.c
>>   From inner merge:  CONFLICT (content): Merge conflict in builtin/reflog.c
>> Auto-merging builtin/reflog.c

Thanks.  I think "From inner merge: " can be removed even when we
emit these messages, as the indentation would make it clear that the
indented ones are different from the outermost ones.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant