'\" t
.\" Title: git-patch-id
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.75.2
.\" Date: 04/04/2016
.\" Manual: Git Manual
.\" Source: Git 2.8.0
.\" Language: English
.\"
.TH "GIT\-PATCH\-ID" "1" "04/04/2016" "Git 2\&.8\&.0" "Git Manual"
.\" -----------------------------------------------------------------
.\" * 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]
.fi
.sp
.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 whitespace and 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
IOW, you can use this thing 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
\-\-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" 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", thereby making existing databases storing such "unstable" or historical patch\-ids unusable\&.
.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\&. 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
.PP
.RS 4
The diff to create the ID of\&.
.RE
.SH "GIT"
.sp
Part of the \fBgit\fR(1) suite