Use
As patch files are text, they can be used with processes such as quality review and modification via a text editor.
In addition to the diff command, a patch file can be produced by other programs, such as Subversion, CVS, RCS, Mercurial and Git.
Patches have been the crucial component of many source control systems, including CVS.
Advanced diffs
Further information: diff § Variations
When more advanced diffs are used, patches can be applied even to files that have been modified in the meantime, as long as those modifications do not interfere with the patch. This is achieved by using "context diffs" and "unified diffs" (also known as "unidiffs"), which surround each change with context, which is the text immediately before and after the changed part. Patch can then use this context to locate the region to be patched, even if it has been displaced by changes earlier in the file, using the line numbers in the diffs as a starting point. Because of this property, context and unified diffs are the preferred form of patches for submission to many software projects.
The above features make diff and patch especially popular for exchanging modifications to open-source software. Outsiders can download the latest publicly available source code, make modifications to it, and send them, in diff form, to the development team. Using diffs, the development team has the ability to effectively review the patches before applying them, and can apply them to a newer code base than the one the outside developer had access to.
Examples
The following command creates a patch file, patchFile, that encodes how to generate newFile from oldFile. The -u option selects to output in unified diff format.
$ diff -u oldFile newFile > patchFile
The following command applies the changes to the file identified in patchFile.
$ patch < patchFile
Patching a file in a subdirectory requires the additional -pnumber option, where number is 1 if the base directory of the source tree is included in the diff, and 0 otherwise.
A patch can be undone, or reversed, with the -R option:
$ patch -R < patchFile
If the file used as the original is significantly different from the actual original file, the patch cannot be cleanly applied. For example, if lines of text are inserted at the beginning, the line numbers referred to in the patch will be incorrect. patch is able to recover from this by looking at nearby lines to relocate the text to be patched. It will also recover when lines of context (for context and unified diffs) are altered; this is described as fuzz.