---
name: "git-merge-index"
section: "1"
platform: "linux"
package: "git"
version: "2.56.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/git-merge-index"
---

# git-merge-index(1)

Run a merge for files needing merging

## NAME

git-merge-index - Run a merge for files needing merging

## SYNOPSIS

```
git merge-index [-o] [-q] <merge-program> (-a | ( [--] <file>...) )
```

## DESCRIPTION

This looks up the \<file\>(s) in the index and, if there are any merge entries, passes the SHA-1 hash for those files as arguments 1, 2, 3 (empty argument if no file), and \<file\> as argument 4. File modes for the three files are passed as arguments 5, 6 and 7.

## OPTIONS

- \--

  Do not interpret any more arguments as options.

- \-a

  Run merge against all files in the index that need merging.

- \-o

  Instead of stopping at the first failed merge, do all of them in one shot - continue with merging even when previous merges returned errors, and only return the error code after all the merges.

- \-q

  Do not complain about a failed merge program (a merge program failure usually indicates conflicts during the merge). This is for porcelains which might want to emit custom messages.

If *git merge-index* is called with multiple \<file\>s (or -a) then it processes them in turn only stopping if merge returns a non-zero exit code.

Typically this is run with a script calling Git’s imitation of the *merge* command from the RCS package.

A sample script called *git merge-one-file* is included in the distribution.

ALERT ALERT ALERT! The Git "merge object order" is different from the RCS *merge* program merge object order. In the above ordering, the original is first. But the argument order to the 3-way merge program *merge* is to have the original in the middle. Don’t ask me why.

Examples:

```
torvalds@ppc970:~/merge-test> git merge-index cat MM
This is MM from the original tree.              # original
This is modified MM in the branch A.            # merge1
This is modified MM in the branch B.            # merge2
This is modified MM in the branch B.            # current contents
```

or

```
torvalds@ppc970:~/merge-test> git merge-index cat AA MM
cat: : No such file or directory
This is added AA in the branch A.
This is added AA in the branch B.
This is added AA in the branch B.
fatal: merge program failed
```

where the latter example shows how *git merge-index* will stop trying to merge once anything has returned an error (i.e., **cat** returned an error for the AA file, because it didn’t exist in the original, and thus *git merge-index* didn’t even try to merge the MM thing).

## GIT

Part of the [**git**(1)](/git/1.md) suite
