Subject: Re: [PATCH] merge-file: fix BUG when --object-id is used in a worktree

From: Patrick Steinhardt <[email-masked]>
Date: Tue, 10 Mar 2026 13:49:02 +0100

On Tue, Mar 10, 2026 at 11:46:01AM +0000, Mathias Rav wrote:

Which commit is this patch based on? It doesn't apply in its current
form on top of "master" since at least 8600b4ec9e (merge-file: honor
merge.conflictStyle outside of a repository, 2026-02-07). Please rebase
the patch.

> diff --git a/builtin/merge-file.c b/builtin/merge-file.c
> index 46775d0c79..a8768c6e0c 100644
> --- a/builtin/merge-file.c
> +++ b/builtin/merge-file.c
> @@ -110,7 +110,7 @@ int cmd_merge_file(int argc,
>  			return error_errno("failed to redirect stderr to /dev/null");
>  	}
>  
> -	if (object_id)
> +	if (object_id && !repo)
>  		setup_git_directory();
>  
>  	for (i = 0; i < 3; i++) {

Okay, makes sense. Makes me wonder whether we have other cases of the
same error class.

> diff --git a/t/t6403-merge-file.sh b/t/t6403-merge-file.sh
> index 06ab4d7aed..60cc43775f 100755
> --- a/t/t6403-merge-file.sh
> +++ b/t/t6403-merge-file.sh
> @@ -506,6 +506,15 @@ test_expect_success '--object-id fails without repository' '
>  	grep "not a git repository" err
>  '
>  
> +test_expect_success 'run inside worktree with --object-id' '
> +	empty="$(test_oid empty_blob)" &&
> +	git worktree add work &&
> +	(cd work && git merge-file --object-id $empty $empty $empty) >actual &&

This can be written without a subshell by saying `git -C work
merge-file`.

Thanks!

Patrick