On Unix-like operating systems, the merge command performs a three-way file merge.

The merge process analyzes three files: a base version, and two conflicting modified versions. It attempts to automatically combine both sets of modifications, based on the shared base version, into a single merged file. If automatic merge is not possible, it facilitates manual merging.

This page describes the GNU/Linux version of merge.

Description

merge is part of the RCS version control package. It is used to perform a three-way file merge.

  • Description
  • How merging works
  • Syntax
  • Examples
  • Related commands
  • Linux commands help

merge analyzes three files – an original file, and two modified versions of the original – and compares them, line-by-line, attempting to resolve the differences between the two sets of modifications to create a single, unified file which represents both sets of changes.

Depending on the differences between the two sets of changes, this may be an automatic process or may require user input.

If neither set of changes conflicts with the other, merge can usually figure out what to do on its own. But if the two sets of changes conflict — for example, if the same line of text is worded differently in both modified files — merge shows the conflict in the resulting merged file.

How merging works

merge incorporates all changes that lead from file2 to file3 into file1. The result ordinarily goes into file1.

Suppose file2 is the original, and both file1 and file3 are modifications of file2. Then merge combines both changes.

A conflict occurs if both file1 and file3 have changes in a common segment of lines. If a conflict is found, merge normally outputs a warning and brackets the conflict with “«««<” and “»»»>” lines. For instance, a typical conflict looks like this:

«««< file A lines in file A

lines in file B

file B

If there are conflicts, the user should edit the result and delete one of the alternatives.

Syntax

merge [options] file1 file2 file3

Options

Examples

Let’s say we have a file named orig.txt with the following contents.

Apples are red. Oranges are orange. Blueberries are delicious.

…and a file named mod1.txt, a modified version of orig.txt:

Apples are obviously red. Oranges are blue. Blueberries are delicious.

…and a file named mod2.txt, which is also a modified version of orig.txt:

Apples are obviously red. Oranges are NOT blue. Blueberries are delicious.

…and we run merge as follows:

merge mod1.txt orig.txt mod2.txt

It analyzes all three files, write to mod1.txt, and display the following warning:

merge: warning: conflicts during merge

This means the merge was successful, but we should be aware that there was a conflict. If we open mod1.txt — which by default is the file where the merge is written — we find that it now contains the following text:

«««< mod1.txt Apples are obviously red. Oranges are blue.

Apples are obviously red. Oranges are NOT blue.

mod2.txt Blueberries are delicious.

It is up to us to decide which “Oranges are…” line to keep (or to combine them in our own way), and make the edit to the file manually.

diff — Identify the differences between two files.