History simplification previously always treated merges as TREESAME if they were TREESAME to any parent. While the desired default behaviour, this could be extremely unhelpful when searching detailed history, and could not be overridden. For example, if a merge had ignored a change, as if by "-s ours", then: git log -m -p --full-history -Schange file would successfully locate "change"'s addition but would not locate the merge that resolved against it. This patch changes the simplification so that when --full-history is specified, a merge is treated as TREESAME only if it is TREESAME to _all_ parents. This means the command above locates a merge that dropped "change". Signed-off-by: Kevin Bracey <kevin@xxxxxxxxx> --- This would address my problem case - it passes existing tests, and covers my (all-too-common) problem. But it would also need documentation changes and a new test. revision.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/revision.c b/revision.c index eb98128..96fe3f5 100644 --- a/revision.c +++ b/revision.c @@ -516,8 +516,14 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit) } die("bad tree compare for commit %s", sha1_to_hex(commit->object.sha1)); } - if (tree_changed && !tree_same) - return; + + if (tree_changed) { + if (!tree_same) + return; + + if (!revs->simplify_history && !revs->simplify_merges) + return; + } commit->object.flags |= TREESAME; } -- 1.8.2.255.g39c5835 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html