It doesn't hurt showing it on `git merge --ff-only` too. Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- 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, -- 2.32.0.36.g70aac2b1aa