`git diff --max-depth` results in fatal error when comparing a merge commit with its parents
From: Han Jiang <hidden>
Date: 2025-11-30 02:30:42
What did you do before the bug happened? (Steps to reproduce your issue) git init './repo' cd './repo' mkdir --parents -- './1/2/3/4/5/6' echo '1' >'./1/2/3/4/5/6/7'; git add './1/2/3/4/5/6/7'; git commit --message="$((++number))"; git branch branch2 git checkout -b branch1; echo '2' >'./1/2/3/4/5/6/7'; git add './1/2/3/4/5/6/7'; git commit --message="$((++number))" git checkout branch2; echo '3' >'./1/2/3/4/5/6/7'; git add './1/2/3/4/5/6/7'; git commit --message="$((++number))" git checkout branch1 git merge --message="$((++number))" branch2 echo '4' >'./1/2/3/4/5/6/7'; git add './1/2/3/4/5/6/7'; git -c 'core.editor=:' merge --continue git lg --all --patch --diff-merges=separate git diff HEAD 'HEAD^1' 'HEAD^2' git diff --max-depth=5 HEAD 'HEAD^1' 'HEAD^2' # fatal: object '...' is not a blob! # $?=128 git diff --max-depth=6 HEAD 'HEAD^1' 'HEAD^2' git diff HEAD 'HEAD^1' 'HEAD^2' './1' git diff --max-depth=5 HEAD 'HEAD^1' 'HEAD^2' './1' # fatal: object '...' is not a blob! # $?=128 git diff --max-depth=6 HEAD 'HEAD^1' 'HEAD^2' './1' git diff HEAD 'HEAD^1' 'HEAD^2' './1/2' git diff --max-depth=4 HEAD 'HEAD^1' 'HEAD^2' './1/2' # fatal: object '...' is not a blob! # $?=128 git diff --max-depth=5 HEAD 'HEAD^1' 'HEAD^2' './1/2' # fatal: object '...' is not a blob! # $?=128 What did you expect to happen? (Expected behavior) `git diff --max-depth=5 HEAD 'HEAD^1' 'HEAD^2'` and `git diff --max-depth=5 HEAD 'HEAD^1' 'HEAD^2' './1'` and `git diff --max-depth=4 HEAD 'HEAD^1' 'HEAD^2' './1/2'` all output nothing. `git diff --max-depth=5 HEAD 'HEAD^1' 'HEAD^2' './1/2'` outputs a combined diff. What happened instead? (Actual behavior) `git diff --max-depth=5 HEAD 'HEAD^1' 'HEAD^2'` and `git diff --max-depth=5 HEAD 'HEAD^1' 'HEAD^2' './1'` and `git diff --max-depth=4 HEAD 'HEAD^1' 'HEAD^2' './1/2'` all output "fatal: object '...' is not a blob!", $?=128. `git diff --max-depth=5 HEAD 'HEAD^1' 'HEAD^2' './1/2'` outputs "fatal: object '...' is not a blob!", $?=128. What's different between what you expected and what actually happened? Anything else you want to add: Please review the rest of the bug report below. You can delete any lines you don't wish to share. [System Info] git version: git version 2.52.0.windows.1 cpu: x86_64 built from commit: 2912d8e9b8253723974b7baf1c890273b1a1c5bd sizeof-long: 4 sizeof-size_t: 8 shell-path: D:/git-sdk-64-build-installers/usr/bin/sh rust: disabled feature: fsmonitor--daemon libcurl: 8.17.0 OpenSSL: OpenSSL 3.5.4 30 Sep 2025 zlib: 1.3.1 SHA-1: SHA1_DC SHA-256: SHA256_BLK default-ref-format: files default-hash: sha1 uname: Windows 10.0 26200 compiler info: gnuc: 15.2 libc info: no libc information available $SHELL (typically, interactive shell): C:\Program Files\Git\usr\bin\bash.exe [Enabled Hooks] not run from a git repository - no hooks to show