When showing what changed between old and new commits, we show a diff of the patches. This diff is a diff between diffs, therefore there are nested +/- signs, and it can be relatively hard to understand what is going on. With the --dual-color option, the preimage and the postimage are colored like the diffs they are, and the *outer* +/- sign is inverted for clarity. Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> --- builtin/branch-diff.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/builtin/branch-diff.c b/builtin/branch-diff.c index e505b696d11..edf80ecb736 100644 --- a/builtin/branch-diff.c +++ b/builtin/branch-diff.c @@ -432,8 +432,11 @@ int cmd_branch_diff(int argc, const char **argv, const char *prefix) { struct diff_options diffopt = { 0 }; struct strbuf four_spaces = STRBUF_INIT; + int dual_color = 0; double creation_weight = 0.6; struct option options[] = { + OPT_BOOL(0, "dual-color", &dual_color, + N_("color both diff and diff-between-diffs")), OPT_SET_INT(0, "no-patches", &diffopt.output_format, N_("short format (no diffs)"), DIFF_FORMAT_NO_OUTPUT), @@ -469,6 +472,11 @@ int cmd_branch_diff(int argc, const char **argv, const char *prefix) argc = j; diff_setup_done(&diffopt); + if (dual_color) { + diffopt.use_color = 1; + diffopt.flags.dual_color_diffed_diffs = 1; + } + if (argc == 2) { if (!strstr(argv[0], "..")) warning(_("no .. in range: '%s'"), argv[0]); -- 2.17.0.395.g6a618d6010f.dirty