GIT-PATCH-ID(1) Git Manual GIT-PATCH-ID(1)

git-patch-id - محاسبه شناسه یکتا برای وصله‌ها

git patch-id [--stable | --unstable | --verbatim]

وصله‌ها را از ورودی استاندارد می‌خواند و شناسه وصله (patch ID) را محاسبه می‌کند.

یک «شناسه وصله» چیزی جز مجموع SHA-1 از تفاوت‌های فایلی مرتبط با یک وصله با صرف‌نظر از شماره خطوط نیست. به این ترتیب، «تا حد معقولی پایدار» و در عین حال به اندازه کافی یکتا است؛ یعنی تضمین می‌شود دو وصله‌ای که «شناسه وصله» یکسانی دارند تقریباً مطمئناً یکی هستند.

کاربرد اصلی این دستور جستجو برای یافتن کامیت‌های تکراری احتمالی است.

هنگام کار با خروجی git diff-tree --patch، این دستور از این واقعیت که پیش از وصله نام شیء کامیت قرار دارد بهره می‌برد و دو رشته هگزادسیمال ۴۰ بایتی خروجی می‌دهد. رشته اول شناسه وصله و رشته دوم شناسه کامیت است. از این قابلیت می‌توان برای ایجاد یک نگاشت میان شناسه وصله و شناسه کامیت برای مجموعه‌ای یا بازه‌ای از کامیت‌ها استفاده کرد.

--verbatim

شناسه وصله ورودی را دقیقاً به همان صورت که داده شده محاسبه می‌کند و هیچ‌گونه فاصله خالی (whitespace) را حذف نمی‌کند. این گزینه متضمن --stable بوده و مانع از --unstable می‌شود.

اگر مقدار patchid.verbatim برابر true باشد، این حالت پیش‌فرض است.

--stable

از یک مجموع هش «پایدار» به عنوان شناسه وصله استفاده می‌کند. با این گزینه:
•تغییر ترتیب تفاوت‌های فایلی که یک وصله را تشکیل می‌دهند بر شناسه تأثیری نمی‌گذارد. به‌ویژه، دو وصله تولیدشده از مقایسه دو درخت یکسان با دو تنظیم متفاوت برای -O<orderfile> منجر به یک امضای شناسه وصله یکسان می‌شوند، که به این ترتیب امکان استفاده از نتیجه محاسبه‌شده به عنوان یک کلید برای ایندکس کردن برخی فراداده‌ها درباره تغییر میان دو درخت را فراهم می‌سازد.
•نتیجه با مقدار تولیدشده توسط گیت نسخه 1.9 و قدیمی‌تر یا مقداری که هنگام تنظیم یک هش «ناپایدار» (گزینه --unstable در زیر را ببینید) ایجاد می‌شود متفاوت است - حتی زمانی که روی خروجی diff بدون هیچ‌گونه استفاده از -O<orderfile> اعمال شود؛ در نتیجه پایگاه‌های داده موجود که چنین شناسه‌های وصله «ناپایدار» یا قدیمی را ذخیره کرده‌اند غیرقابل استفاده می‌شوند.
•تمام فاصله‌های خالی (whitespace) درون وصله نادیده گرفته می‌شوند و تأثیری بر شناسه نمی‌گذارند.

اگر patchid.stable روی true تنظیم شده باشد، این حالت پیش‌فرض است.

--unstable

از یک هش «ناپایدار» به عنوان شناسه وصله استفاده می‌کند. با این گزینه، نتیجه تولیدشده با مقدار شناسه وصله تولیدشده توسط گیت 1.9 و قدیمی‌تر سازگار است و فاصله‌های خالی نادیده گرفته می‌شوند. کاربرانی با پایگاه‌های داده از پیش موجود که شناسه‌های وصله تولیدشده با گیت 1.9 و قدیمی‌تر را ذخیره کرده‌اند (و با وصله‌های تغییرترتیب‌یافته سر و کار ندارند) ممکن است بخواهند از این گزینه استفاده کنند.

این گزینه پیش‌فرض است.

دستور git-cherry(1) نشان می‌دهد چه کامیت‌هایی از یک شاخه دارای کامیت‌های معادل شناسه وصله در شاخه‌ای بالادست هستند. اما فقط به شما می‌گوید که آیا چنین کامیتی وجود دارد یا خیر. اگر بخواهید کامیت‌های مربوطه را در بالادست بدانید چه؟ می‌توانیم از این دستور برای ایجاد یک نگاشت میان شاخه شما و شاخه بالادست استفاده کنیم:

#!/bin/sh
upstream="$1"
branch="$2"
test -z "$branch" && branch=HEAD
limit="$3"
if test -n "$limit"
then
    tail_opts="$limit".."$upstream"
else
    since=$(git log --format=%aI "$upstream".."$branch" | tail -1)
    tail_opts=--since="$since"' '"$upstream"
fi
for_branch=$(mktemp)
for_upstream=$(mktemp)
git rev-list --no-merges "$upstream".."$branch" |
    git diff-tree --patch --stdin |
    git patch-id  --stable | sort >"$for_branch"
git rev-list --no-merges $tail_opts |
    git diff-tree --patch --stdin |
    git patch-id  --stable | sort >"$for_upstream"
join -a1 "$for_branch" "$for_upstream" | cut -d' ' -f2,3
rm "$for_branch"
rm "$for_upstream"

اکنون ستون اول کامیت مربوط به شاخه شما را نشان می‌دهد و ستون دوم کامیت معادل شناسه وصله را در صورت وجود نمایش می‌دهد.

git-cherry(1)

بخشی از مجموعه git(1)

2026-06-29 Git 2.55.0