Thank you for filling out a Git bug report! Please answer the following questions to help us understand your issue. What did you do before the bug happened? (Steps to reproduce your issue) git log -L /regex/,/regex/:myfile to a repo in which 2MB text file is committed about 2800 times. What did you expect to happen? (Expected behavior) get the result. What happened instead? (Actual behavior) fatal: Out of memory, malloc failed (tried to allocate 2346801 bytes) What's different between what you expected and what actually happened? The function requires too much memory. -n option should work for -L function. Anything else you want to add: I made a script to reproduce this. Please run the script below. Results in each environments are in its header. A workaround which is given in other BBS is included also. #!/bin/bash # # Bug report: git -L requires excessive memory. # Run this script to reproduce # # MINGW32(git version 2.38.1.windows.1) fatal: Out of memory, malloc failed (tried to allocate 2346801 bytes) # MINGW64(git version 2.38.1.windows.1) requires 8.6GB # Linux64(git version 2.20.1 ) requires 13.1GB # git --version if [ ! -d .git ]; then git init c=${1:-3000} for (( i=0;i<c;i++)); do gawk -v r="$i" ' BEGIN{ for (i=0;i<100;i++) { if (r>=i) { printf("function func_%03d(){ // revised at %d\n",i, int((r-i)/100)*100+i%100) printf(" // contents of function\n") printf("}\n") make_subfuncs(i); } } exit } function make_subfuncs(i, j){ for (j=0;j<300;j++) { printf("function func_%03d_sub%03d(){\n",i,j) printf(" // contents of sub functions are NOT revised.\n") printf("}\n") } }' > test.txt git add test.txt git commit -m "revision $i" done git gc fi git log -L /func_007\(/,/}$/:test.txt # this command requires excessive memory. git log -L /func_007\(/,/}$/:test.txt -n 10 # -n option doesn't work also. #git log -L /func_007\(/,/}$/:test.txt HEAD~10..HEAD~0 # this works. # # This can be a workaround # step=50 num=`git log | grep -c commit` for ((i=0;i<$num;i+=$step)); do end=$((i+$step)) range=HEAD~$end..HEAD~$i if [ $end -ge $num ]; then range=HEAD~$i fi # echo $range git --no-pager log -L /func_007\(/,/}$/:test.txt $range done [System Info] [Enabled Hooks]