Git’s Database Internals III: File History Queries (GitHub blog)
The GitHub blog series on how the Git database works continues with thislook at file-history queries.
If these history modes usually have the same output, then whywouldn't we always use --full-history--simplify-merges? The reason is performance. Not onlydoes simplified history speed up the query by skipping a largeportion of commits, it also allows iterative output. The simplifiedhistory can output portions of the history without walking theentire history. By contrast, the --simplify-merges algorithm isdefined recursively starting at commits with no parents. Git cannotoutput a single result until walking all reachable commits andcomputing their diffs on the input path. This can be extremely slowfor large repositories.