Node:Merging with patch, Next:Making Patches, Up:Top

## Merging with `patch`

`patch` takes comparison output produced by `diff` and applies the differences to a copy of the original file, producing a patched version. With `patch`, you can distribute just the changes to a set of files instead of distributing the entire file set; your correspondents can apply `patch` to update their copy of the files with your changes. `patch` automatically determines the diff format, skips any leading or trailing headers, and uses the headers to determine which file to patch. This lets your correspondents feed a mail message containing a difference listing directly to `patch`.

`patch` detects and warns about common problems like forward patches. It saves any patches that it could not apply. It can also maintain a `patchlevel.h` file to ensure that your correspondents apply diffs in the proper order.

`patch` accepts a series of diffs in its standard input, usually separated by headers that specify which file to patch. It applies `diff` hunks (see Hunks) one by one. If a hunk does not exactly match the original file, `patch` uses heuristics to try to patch the file as well as it can. If no approximate match can be found, `patch` rejects the hunk and skips to the next hunk. `patch` normally replaces each file f with its new version, putting reject hunks (if any) into `f.rej`.

See Invoking patch, for detailed information on the options to `patch`.

- patch Input: Selecting the type of `patch` input.
- Imperfect: Dealing with imperfect patches.
- Creating and Removing: Creating and removing files with a patch.
- Patching Time Stamps: Updating time stamps on patched files.
- Multiple Patches: Handling multiple patches in a file.
- patch Directories: Changing directory and stripping directories.
- Backups: Whether backup files are made.
- Backup Names: Backup file names.
- Reject Names: Reject file names.