It doesn't hurt showing it on `git merge --ff-only` too.
Signed-off-by: Felipe Contreras <redacted>
---
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