How to Use diff3 Command for File Merging in Linux

The diff3 command in Linux is a helpful tool that compares three files and shows their differences, which is mainly useful for programmers and system administrators who work with multiple versions of the same file and need to merge them, or identify changes between different versions.

In this article, we’ll go through the basics of using the diff3 command, its common options, and a few examples to understand how it works in Linux.

What is the diff3 Command?

diff3 is a tool that compares three files line by line, identifies the differences, and displays them in a format that’s easy to understand.

It can be used to:

  • Find differences between the three files.
  • Automatically merge changes from different files.
  • Handle conflicts that occur when merging file versions.

The diff3 command is similar to the diff command or sdiff command but works with three files instead of two, which is particularly useful when you have multiple contributors working on the same file, and you need to merge their changes into a single version.

Basic Syntax of diff3 Command

The basic syntax of the diff3 command is:

diff3 [options] file1 file2 file3

Explanation of the above command.

  • file1: The first version of the file.
  • file2: The second version of the file.
  • file3: The third version of the file.

Commonly Used Options

Following are some commonly used options of diff3 Command:

  • -e: Create an ed script that can be used to apply changes to a file.
  • -m: Automatically merge the files.
  • -A: Include all changes from all files.
  • -E: Attempt to merge files even if conflicts are found.
  • -3: Show only changes that differ between all three files.

Finding Differences Between Files in Linux

Let’s say you have three files: file1.txt, file2.txt, and file3.txt. Each file contains a slightly different version of the same content, and you want to compare them to see where the differences lie.

Example Files
Example Files

To compare these three files, you can use the following command:

diff3 file1.txt file2.txt file3.txt
Compare Files for Differences
Compare Files for Differences

Here’s what this output means:

  • 1:2c: This shows that in file1.txt, the change occurs at line 2, and the content of line 2 is This is line 2..
  • 2:2c: This shows that in file2.txt, the change also happens at line 2, but the content of that line has been modified to This is modified line 2..
  • 3:2,3c: This shows that in file3.txt, there are changes in lines 2 and 3. Line 2 remains the same (This is line 2.), but line 3 is an additional line that states: This is an added line..

Merging Files with diff3 in Linux

If you want to merge the three files and create a new file with all the changes, you can use the -m option:

diff3 -m file1.txt file2.txt file3.txt

This will output the merged content with conflict markers showing where there are conflicting changes.

Merging Files in Linux
Merging Files in Linux

Here’s what this output means:

  • <<<<<<< file1.txt: This marks the beginning of a conflict and shows the version from file1.txt.
  • ||||||| file2.txt: This line shows the content from file2.txt (middle file in the comparison).
  • =======: This separates the conflicting lines.
  • >>>>>>> file3.txt: This marks the version from file3.txt and the end of the conflict block.

You can manually edit this to keep the changes you want.

Applying Changes from Multiple Files to One with diff3

You can also use diff3 to create an ed script that applies changes from file2.txt and file3.txt to file1.txt. This can be done using the -e option:

diff3 -e file1.txt file2.txt file3.txt > scriptfile

This command creates a file named scriptfile that contains the generated ed script, which you can use the ed command to apply the script from scriptfile to file1.txt.

ed file1.txt < scriptfile

This will modify file1.txt according to the changes specified in the scriptfile, you can verify by the following cat command to see if the changes have been applied:

cat file1.txt
Resolving Conflicts with diff3 Command
Resolving Conflicts with diff3 Command

This is helpful if you want to automate the merging of files using scripts.

Resolving Conflicts in diff3 Merges

When using diff3 for merging, conflicts may arise when there are differences between all three files at the same location. These conflicts are marked in the output, and you’ll need to manually resolve them.

  • To resolve conflicts, open the file that contains the conflict markers.
  • Edit the file to remove the unwanted lines and keep the changes you want.
  • After resolving the conflict, save the file.
Conclusion

The diff3 command is a powerful tool for comparing and merging three files in Linux, which is particularly useful for handling multiple versions of the same file and resolving conflicts when merging changes.

By understanding its basic usage and options, you can effectively manage file versions and collaborate with others on projects.

Hey TecMint readers,

Exciting news! Every month, our top blog commenters will have the chance to win fantastic rewards, like free Linux eBooks such as RHCE, RHCSA, LFCS, Learn Linux, and Awk, each worth $20!

Learn more about the contest and stand a chance to win by sharing your thoughts below!

Ravi Saive
I am an experienced GNU/Linux expert and a full-stack software developer with over a decade in the field of Linux and Open Source technologies

Each tutorial at TecMint is created by a team of experienced Linux system administrators so that it meets our high-quality standards.

Join the TecMint Weekly Newsletter (More Than 156,129 Linux Enthusiasts Have Subscribed)
Was this article helpful? Please add a comment or buy me a coffee to show your appreciation.

Got Something to Say? Join the Discussion...

Thank you for taking the time to share your thoughts with us. We appreciate your decision to leave a comment and value your contribution to the discussion. It's important to note that we moderate all comments in accordance with our comment policy to ensure a respectful and constructive conversation.

Rest assured that your email address will remain private and will not be published or shared with anyone. We prioritize the privacy and security of our users.