git-patch-id.1 (4104B)
- '\" t
- .\" Title: git-patch-id
- .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
- .\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
- .\" Date: 2025-03-14
- .\" Manual: Git Manual
- .\" Source: Git 2.49.0
- .\" Language: English
- .\"
- .TH "GIT\-PATCH\-ID" "1" "2025-03-14" "Git 2\&.49\&.0" "Git Manual"
- .\" -----------------------------------------------------------------
- .\" * Define some portability stuff
- .\" -----------------------------------------------------------------
- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- .\" http://bugs.debian.org/507673
- .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- .ie \n(.g .ds Aq \(aq
- .el .ds Aq '
- .\" -----------------------------------------------------------------
- .\" * set default formatting
- .\" -----------------------------------------------------------------
- .\" disable hyphenation
- .nh
- .\" disable justification (adjust text to left margin only)
- .ad l
- .\" -----------------------------------------------------------------
- .\" * MAIN CONTENT STARTS HERE *
- .\" -----------------------------------------------------------------
- .SH "NAME"
- git-patch-id \- Compute unique ID for a patch
- .SH "SYNOPSIS"
- .sp
- .nf
- \fIgit patch\-id\fR [\-\-stable | \-\-unstable | \-\-verbatim]
- .fi
- .SH "DESCRIPTION"
- .sp
- Read a patch from the standard input and compute the patch ID for it\&.
- .sp
- A "patch ID" is nothing but a sum of SHA\-1 of the file diffs associated with a patch, with line numbers ignored\&. As such, it\(cqs "reasonably stable", but at the same time also reasonably unique, i\&.e\&., two patches that have the same "patch ID" are almost guaranteed to be the same thing\&.
- .sp
- The main usecase for this command is to look for likely duplicate commits\&.
- .sp
- When dealing with \fIgit diff\-tree\fR output, it takes advantage of the fact that the patch is prefixed with the object name of the commit, and outputs two 40\-byte hexadecimal strings\&. The first string is the patch ID, and the second string is the commit ID\&. This can be used to make a mapping from patch ID to commit ID\&.
- .SH "OPTIONS"
- .PP
- \-\-verbatim
- .RS 4
- Calculate the patch\-id of the input as it is given, do not strip any whitespace\&.
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- This is the default if patchid\&.verbatim is true\&.
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .PP
- \-\-stable
- .RS 4
- Use a "stable" sum of hashes as the patch ID\&. With this option:
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- Reordering file diffs that make up a patch does not affect the ID\&. In particular, two patches produced by comparing the same two trees with two different settings for "\-O<orderfile>" result in the same patch ID signature, thereby allowing the computed result to be used as a key to index some meta\-information about the change between the two trees;
- .RE
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- Result is different from the value produced by git 1\&.9 and older or produced when an "unstable" hash (see \-\-unstable below) is configured \- even when used on a diff output taken without any use of "\-O<orderfile>", thereby making existing databases storing such "unstable" or historical patch\-ids unusable\&.
- .RE
- .sp
- .RS 4
- .ie n \{\
- \h'-04'\(bu\h'+03'\c
- .\}
- .el \{\
- .sp -1
- .IP \(bu 2.3
- .\}
- All whitespace within the patch is ignored and does not affect the id\&.
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- This is the default if patchid\&.stable is set to true\&.
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .RE
- .PP
- \-\-unstable
- .RS 4
- Use an "unstable" hash as the patch ID\&. With this option, the result produced is compatible with the patch\-id value produced by git 1\&.9 and older and whitespace is ignored\&. Users with pre\-existing databases storing patch\-ids produced by git 1\&.9 and older (who do not deal with reordered patches) may want to use this option\&.
- .sp
- .if n \{\
- .RS 4
- .\}
- .nf
- This is the default\&.
- .fi
- .if n \{\
- .RE
- .\}
- .RE
- .SH "GIT"
- .sp
- Part of the \fBgit\fR(1) suite