Subject: Re: [RFC PATCH 05/35] fast-forward: add advice for novices

From: Ævar Arnfjörð Bjarmason <[email-masked]>
Date: Tue, 06 Jul 2021 22:09:57 +0200

On Mon, Jul 05 2021, Felipe Contreras wrote:

> It doesn't hurt showing it on `git merge --ff-only` too.
>
> Signed-off-by: Felipe Contreras <[email-masked]>
> ---
>  advice.c        | 11 +++++++++++
>  advice.h        |  1 +
>  builtin/merge.c |  4 +++-
>  3 files changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/advice.c b/advice.c
> index 0b9c89c48a..8f068c8be9 100644
> --- a/advice.c
> +++ b/advice.c
> @@ -326,3 +326,14 @@ void detach_advice(const char *new_name)
>  
>  	fprintf(stderr, fmt, new_name);
>  }
> +
> +void diverging_advice(void)
> +{
> +	advise(_("Diverging branches can't be fast-forwarded, you need to either:\n"
> +		"\n"
> +		"\tgit merge\n"
> +		"\n"
> +		"or:\n"
> +		"\n"
> +		"\tgit rebase\n"));
> +}
> diff --git a/advice.h b/advice.h
> index bd26c385d0..6ce967c962 100644
> --- a/advice.h
> +++ b/advice.h
> @@ -97,5 +97,6 @@ void NORETURN die_resolve_conflict(const char *me);
>  void NORETURN die_conclude_merge(void);
>  void advise_on_updating_sparse_paths(struct string_list *pathspec_list);
>  void detach_advice(const char *new_name);
> +void diverging_advice(void);
>  
>  #endif /* ADVICE_H */
> diff --git a/builtin/merge.c b/builtin/merge.c
> index e396943d37..1836f98f82 100644
> --- a/builtin/merge.c
> +++ b/builtin/merge.c
> @@ -1625,8 +1625,10 @@ static int merge_common(int argc, const char **argv, const char *prefix,
>  		}
>  	}
>  
> -	if (fast_forward == FF_ONLY)
> +	if (fast_forward == FF_ONLY) {
> +		diverging_advice();
>  		die(_("unable to fast-forward"));
> +	}
>  
>  	if (autostash)
>  		create_autostash(the_repository,

...ah, and re my comment on the earlier patch here's where we're adding
advice.

I'd think just squash that into this, or mention in the commit message
"a later commit will add an advice() before this, where this new wording
will make more sense" or something...