[PATCH 2/7] merge: add diverging advice for novices
From: Felipe Contreras <hidden>
Date: 2021-07-22 00:09:05
Subsystem:
the rest · Maintainer:
Linus Torvalds
Diverging branches is one of the most confusing aspects of distributed version control systems for novices, so a little help explaining what to do on those situations will come in handy. Right now this advice will be displayed only when the user does `git merge --ff-only`, `git pull --ff-only`, or has configured `pull.ff=only` for `git pull`, but in the future it's expected that --ff-only will be the default for `git pull`, and a proposed `git fast-forward` command will imply --ff-only, in addition to `git update`. So it makes sense to add the advice in preparation for those future changes, although even currently it helps. 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 05e631229d..56a526f42c 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c@@ -1619,8 +1619,10 @@ int cmd_merge(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.40.gb9b36f9b52