Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.54.0
2026-04-20
-
2.53.0
2026-02-02
-
2.52.0
2025-11-17
- 2.51.2 no changes
-
2.51.1
2025-10-15
- 2.39.1 → 2.51.0 no changes
-
2.39.0
2022-12-12
- 2.15.4 → 2.38.5 no changes
- 2.14.6 no changes
- 2.7.6 → 2.13.7 no changes
-
2.6.7
2017-05-05
- 2.2.3 → 2.5.6 no changes
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
ОПИСАНИЕ
Читать изменения (патчи) из стандартного ввода и вычислять идентификаторы патчей.
«Идентификатор патча» — это не что иное, как сумма SHA-1 сравнений файлов, связанных с патчем, с игнорированием номеров строк. Как таковой, он «достаточно стабилен», но в то же время достаточно уникален, т.е. два патча с одинаковым «идентификатором патча» почти гарантированно являются одним и тем же.
Основной вариант использования этой команды — поиск вероятных дубликатов коммитов.
При работе с выводом git diff-tree --patch он использует тот факт, что патчу предшествует имя объекта коммита, и выводит две 40-байтовые шестнадцатеричные строки. Первая строка — это идентификатор патча, а вторая строка — идентификатор коммита. Это можно использовать для создания сопоставления идентификатора патча с идентификатором коммита для набора или диапазона коммитов.
ПАРАМЕТРЫ
-
--verbatim -
Вычисляет идентификатор патча входных данных как есть, не удаляет никакие пробелы. Подразумевает
--stableи запрещает--unstable.Это значение по умолчанию, если
patchid.verbatimравенtrue. -
--stable -
Использовать «стабильную» сумму хешей в качестве идентификатора патча. С этим параметром:
-
Переупорядочивание сравнений файлов, составляющих патч, не влияет на идентификатор. В частности, два патча, созданные путём сравнения одних и тех же двух деревьев с двумя разными настройками
-O<файл-порядка>, приводят к одной и той же сигнатуре идентификатора патча, позволяя использовать вычисленный результат в качестве ключа для индексации некоторой метаинформации об изменении между двумя деревьями. -
Результат отличается от значения, созданного Git 1.9 и старше, или созданного, когда настроен "нестабильный" хеш (см.
--unstableниже), — даже при использовании на выводе сравнения, полученном без использования-O<файл-порядка>, что делает существующие базы данных, хранящие такие "нестабильные" или исторические идентификаторы патчей, непригодными для использования. -
Все пробелы внутри патча игнорируются и не влияют на идентификатор.
Это значение по умолчанию, если
patchid.stableустановлен вtrue. -
-
--unstable -
Использовать «нестабильный» хеш в качестве идентификатора патча. С этим параметром создаваемый результат совместим со значением идентификатора патча, созданным Git 1.9 и старше, и пробелы игнорируются. Пользователи с существующими базами данных, хранящими идентификаторы патчей, созданные Git 1.9 и старше (которые не работают с переупорядоченными патчами), могут захотеть использовать этот параметр.
Это значение по умолчанию.
ПРИМЕРЫ
git-cherry[1] показывает, какие коммиты из ветки имеют эквивалентные коммиты по идентификатору патча в некоторой вышестоящей ветке. Но он только говорит вам, существует ли такой коммит или нет. Что, если вы хотите узнать соответствующие коммиты в вышестоящей ветке? Мы можем использовать эту команду для создания сопоставления между вашей веткой и вышестоящей веткой:
#!/bin/sh
вышестоящая="$1"
ветка="$2"
test -z "$ветка" && ветка=HEAD
предел="$3"
if test -n "$предел"
then
параметры_хвоста="$предел".."$вышестоящая"
else
since=$(git log --format=%aI "$вышестоящая".."$ветка" | tail -1)
параметры_хвоста=--since="$since"' '"$вышестоящая"
fi
for_ветка=$(mktemp)
for_вышестоящая=$(mktemp)
git rev-list --no-merges "$вышестоящая".."$ветка" |
git diff-tree --patch --stdin |
git patch-id --stable | sort >"$for_ветка"
git rev-list --no-merges $параметры_хвоста |
git diff-tree --patch --stdin |
git patch-id --stable | sort >"$for_вышестоящая"
join -a1 "$for_ветка" "$for_вышестоящая" | cut -d' ' -f2,3
rm "$for_ветка"
rm "$for_вышестоящая"
Теперь первый столбец показывает коммит из вашей ветки, а второй столбец показывает эквивалентный коммит по идентификатору патча, если он существует.
GIT
Является частью пакета git[1]