;
        m = xcalloc(1, i);
 
-       if (with_tree)
-               overlay_tree_on_cache(with_tree, prefix);
+       if (with_tree) {
+               const char *max_prefix = pathspec_prefix(prefix, pattern);
+               overlay_tree_on_cache(with_tree, max_prefix);
+       }
 
        for (i = 0; i < active_nr; i++) {
                struct cache_entry *ce = active_cache[i];