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.51.1 no changes
-
2.51.0
2025-08-18
- 2.48.1 → 2.50.1 no changes
-
2.48.0
2025-01-10
- 2.46.1 → 2.47.3 no changes
-
2.46.0
2024-07-29
- 2.45.4 no changes
-
2.45.3
2024-11-26
- 2.45.1 → 2.45.2 no changes
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.4 no changes
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 no changes
-
2.43.0
2023-11-20
- 2.42.2 → 2.42.4 no changes
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 no changes
-
2.41.0
2023-06-01
- 2.40.1 → 2.40.4 no changes
-
2.40.0
2023-03-12
- 2.37.3 → 2.39.5 no changes
-
2.37.2
2022-08-11
- 2.36.1 → 2.37.1 no changes
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 no changes
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.8 no changes
-
2.34.0
2021-11-15
- 2.33.1 → 2.33.8 no changes
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 no changes
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 no changes
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 no changes
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 no changes
-
2.29.0
2020-10-19
- 2.28.1 no changes
-
2.28.0
2020-07-27
- 2.25.2 → 2.27.1 no changes
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 no changes
-
2.24.0
2019-11-04
- 2.22.1 → 2.23.4 no changes
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 no changes
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 no changes
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 no changes
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 no changes
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
- 2.10.5 no changes
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 no changes
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 no changes
-
2.0.5
2014-12-17
СИНОПСИС
git diff-index [-m] [--cached] [--merge-base] [<common-diff-options>] <tree-ish> [<path>…]
ОПИС
Порівняйте вміст і режим блобів, знайдених в об’єкті дерева, з відповідними відстежуваними файлами в робочому дереві або з відповідними шляхами в індексі. Якщо присутні аргументи <шлях>, порівнюйте лише шляхи, що відповідають цим шаблонам. В іншому випадку порівнюються всі відстежувані файли.
ОПЦІЇ
-
-p -
-u -
--patch -
Згенерувати патч (див. Генерація тексту патча за допомогою -p).
-
-s -
--no-patch -
Придушити весь вивід з механізму різниці. Корисно для команд типу
gitshow, які показують патч за замовчуванням, щоб приглушити їхній вивід або скасувати дію опцій типу--patch,--stat, зазначених раніше в командному рядку в псевдонімі. -
-U<n> -
--unified=<n> -
Генерувати різниці з <n> рядками контексту замість звичайних трьох. Implies
--patch. -
--output=<файл> -
Вивід у певний файл замість stdout.
-
--output-indicator-new=<char> -
--output-indicator-old=<char> -
--output-indicator-context=<char> -
Вкажіть символ, який використовується для позначення нових, старих або контекстних рядків у згенерованому патчі. Зазвичай це
+,-та '' відповідно. -
--raw -
Згенерувати різницю у необробленому форматі. Це значення за замовчуванням.
-
--patch-with-raw -
Синонім до слова
-p--raw. -
--indent-heuristic -
Увімкнути евристику, яка зсуває межі різниці фрагментів, щоб зробити патчі легшими для читання. Це значення за замовчуванням.
-
--no-indent-heuristic -
Вимкнути евристику відступів.
-
--minimal -
Витратьте додатковий час, щоб переконатися, що отримано найменшу можливу різницю.
-
--patience -
Згенеруйте різницю за допомогою алгоритму "різниця терпіння".
-
--histogram -
Згенеруйте різницю за допомогою алгоритму "різниця гістограми".
-
--anchored=<text> -
Згенеруйте різницю за допомогою алгоритму "закріпленої різниці".
Цей параметр можна вказати більше одного разу.
Якщо рядок існує як у джерелі, так і в пункті призначення, існує лише один раз і починається з <текст>, цей алгоритм намагається запобігти його появі як видалення або додавання у виводі. Він внутрішньо використовує алгоритм "різниці терпіння".
-
--diff-algorithm=(patience|minimal|histogram|myers) -
Виберіть алгоритм порівняння. Варіанти такі:
-
default -
myers -
Базовий алгоритм жадібного різниці. Наразі це алгоритм за замовчуванням.
-
minimal -
Витратьте додатковий час, щоб переконатися, що отримано найменшу можливу різницю.
-
patience -
Використовуйте алгоритм "різниця терпіння" під час створення патчів.
-
histogram -
Цей алгоритм розширює алгоритм терпіння для «підтримки рідко зустрічаються поширених елементів».
Наприклад, якщо ви налаштували змінну
diff.algorithmна значення, відмінне від значення за замовчуванням, і хочете використовувати значення за замовчуванням, тоді вам потрібно використовувати опцію--diff-algorithm=default. -
-
--stat[=<width>[,<name-width>[,<count>]]] -
Згенерувати diffstat. За замовчуванням для частини імені файлу буде використано стільки місця, скільки потрібно, а решта – для частини графу. Максимальна ширина за замовчуванням дорівнює ширині терміналу або 80 стовпців, якщо не підключено до терміналу, і може бути перевизначена за допомогою <width>. Ширину частини імені файлу можна обмежити, вказавши іншу ширину <name-width> після коми або встановивши
diff.statNameWidth=<name-width>. Ширину частини графу можна обмежити за допомогою--stat-graph-width=<graph-width> або встановившиdiff.statGraphWidth=<graph-width>. Використання--statабо--stat-graph-widthвпливає на всі команди, що генерують графік статистики, тоді як встановленняdiff.statNameWidthабоdiff.statGraphWidthне впливає наgitformat-patch. Надаючи третій параметр <count>, ви можете обмежити вивід першими рядками <count>, а потім ..., якщо їх більше.Ці параметри також можна встановити окремо за допомогою
--stat-width=<ширина>,--stat-name-width=<ширина-назви> та--stat-count=<кількість>. -
--compact-summary -
Вивести стислий виклад розширеної інформації заголовка, такої як створення або видалення файлів ("new" або "gone", необов’язково
+l, якщо це символічне посилання) та зміни режиму (+xабо-xдля додавання або видалення виконуваного біта відповідно) у diffstat. Інформація розміщується між частиною імені файлу та частиною графу. Має на увазі--stat. -
--numstat -
Подібно до
--stat, але показує кількість доданих та видалених рядків у десятковому форматі та шлях без скорочень, що робить його зручнішим для машинного обчислення. Для бінарних файлів виводить два-замість00. -
--shortstat -
Виведіть лише останній рядок формату
--stat, що містить загальну кількість змінених файлів, а також кількість доданих та видалених рядків. -
-X[<param>,...] -
--dirstat[=<param>,...] -
Виведіть розподіл відносної кількості змін для кожного підкаталогу. Поведінку
--dirstatможна налаштувати, передавши їй список параметрів, розділених комами. Значення за замовчуванням контролюються змінною конфігураціїdiff.dirstat(див. git-config[1]). Доступні такі параметри:-
changes -
Обчисліть числа dirstat, підрахувавши рядки, які були видалені з джерела або додані до місця призначення. Це ігнорує кількість чистих переміщень коду у файлі. Іншими словами, перестановка рядків у файлі враховується не так часто, як інші зміни. Це поведінка за замовчуванням, коли не задано параметр.
-
lines -
Обчисліть числа dirstat, виконавши звичайний рядковий аналіз різниці та підсумувавши кількість видалених/доданих рядків. (Для бінарних файлів рахуйте 64-байтові фрагменти, оскільки бінарні файли не мають природного поняття рядків). Це дорожча поведінка
--dirstat, ніж поведінкаchanges, але вона враховує переставлені рядки у файлі так само, як і інші зміни. Отриманий результат узгоджується з тим, що ви отримуєте від інших опцій--*stat. -
files -
Обчисліть числа dirstat, підрахувавши кількість змінених файлів. Кожен змінений файл враховується однаково в аналізі dirstat. Це найдешевша з точки зору обчислень поведінка
--dirstat, оскільки взагалі не потрібно переглядати вміст файлу. -
cumulative -
Також підраховуйте зміни в дочірньому каталозі для батьківського каталогу. Зверніть увагу, що під час використання
cumulativeсума відсотків, що повідомляються, може перевищувати 100%. Поведінку за замовчуванням (некумулятивну) можна вказати за допомогою параметраnoncumulative. - <limit>
-
Цілочисельний параметр визначає граничний відсоток (за замовчуванням 3%). Каталоги, що вносять менше змін, ніж цей відсоток, не відображаються у виводі.
Приклад: Наступний код підраховуватиме змінені файли, ігноруючи каталоги з менш ніж 10% від загальної кількості змінених файлів, та накопичуючи кількість дочірніх каталогів у батьківських каталогах:
--dirstat=files,10,cumulative. -
-
--cumulative -
Синонім до
--dirstat=cumulative. -
--dirstat-by-file[=<param>,...] -
Синонім до
--dirstat=files,<param>,.... -
--summary -
Вивести стислий виклад розширеної інформації заголовка, такої як створення, перейменування та зміни режиму.
-
--patch-with-stat -
Синонім до
-p--stat. -
-z -
Коли було використано
--raw,--numstat,--name-onlyабо--name-statusвраховано, не змінюйте шляхи та використовуйте NUL як термінатори вихідних полів.Без цієї опції шляхи з «незвичайними» символами взяті в лапки, як пояснено для змінної конфігурації
core.quotePath(див. git-config[1]). -
--name-only -
Показувати лише назву кожного зміненого файлу в дереві пост-образів. Назви файлів часто кодуються в UTF-8. Для отримання додаткової інформації див. обговорення кодування на сторінці довідки git-log[1].
-
--name-status -
Показувати лише ім’я(імена) та стан кожного зміненого файлу. Дивіться опис опції
--diff-filterщодо значення літер стану. Так само, як і--name-only, імена файлів часто кодуються в UTF-8. -
--submodule[=<формат>] -
Вкажіть, як відображаються відмінності в підмодулях. При вказівці
--submodule=shortвикористовується форматshort. Цей формат показує лише назви комітів на початку та в кінці діапазону. Коли вказано--submoduleабо--submodule=log, використовується форматlog. Цей формат відображає коміти в діапазоні, подібно до git-submodule[1]summary. Коли вказано--submodule=diff, використовується форматdiff. Цей формат показує вбудовану різницю змін у вмісті підмодуля між діапазоном комітів. За замовчуванням використовується форматdiff.submoduleабоshort, якщо параметр конфігурації не встановлено. -
--color[=<when>] -
Показати кольорову різницю.
--color(тобто без=<when>) те саме, що й--color=always. <when> може бути одним ізalways,neverабоauto. -
--no-color -
Вимкніть кольорову різницю. Це те саме, що
--color=never. -
--color-moved[=<режим>] -
Переміщені рядки коду забарвлюються по-різному. <режим> за замовчуванням має значення
no, якщо опція не вказана та доzebra, якщо вказано опцію без режиму. Режим має бути одним із таких:-
no -
Переміщені рядки не виділяються.
-
default -
Є синонімом слова «зебра». У майбутньому це може змінитися на більш розумний режим.
-
plain -
Будь-який рядок, доданий в одному місці та видалений в іншому, буде забарвлений за допомогою
color.diff.newMoved. Аналогічно,color.diff.oldMovedбуде використано для видалених рядків, доданих деінде в різниці. Цей режим виявляє будь-який переміщений рядок, але він не дуже корисний під час перегляду, щоб визначити, чи блок коду був переміщений без перестановки. -
blocks -
Блоки переміщеного тексту довжиною щонайменше 20 буквено-цифрових символів виявляються жадібно. Виявлені блоки зафарбовуються кольором
color.diff.(old|new)Moved. Сусідні блоки неможливо розрізнити. -
zebra -
Блоки переміщеного тексту виявляються як у режимі
blocks. Блоки зафарбовуються кольоромcolor.diff.(old|new)Movedабоcolor.diff.(old|new)MovedAlternative. Зміна між двома кольорами вказує на виявлення нового блоку. -
dimmed-zebra -
Подібно до
zebra, але виконується додаткове затемнення нецікавих частин переміщеного коду. Лінії, що межують з двома суміжними блоками, вважаються цікавими, решта – нецікавими.dimmed_zebra– застарілий синонім.
-
-
--no-color-moved -
Вимкніть виявлення руху. Це можна використовувати для зміни налаштувань конфігурації. Це те саме, що й
--color-moved=no. -
--color-moved-ws=<режим>,... -
Це налаштовує, як пробіли ігноруються під час виконання виявлення переміщення для
--color-moved. Ці режими можна вказати у вигляді списку, розділеного комами:-
no -
Не ігноруйте пробіли під час виявлення руху.
-
ignore-space-at-eol -
Ігнорувати зміни пробілів в кінці циклу.
-
ignore-space-change -
Ігнорувати зміни кількості пробілів. Це ігнорує пробіли в кінці рядка та вважає всі інші послідовності з одного або кількох пробілних символів еквівалентними.
-
ignore-all-space -
Ігнорувати пробіли під час порівняння рядків. Це ігнорує відмінності, навіть якщо один рядок має пробіли, а інший їх не має.
-
allow-indentation-change -
Спочатку ігноруйте будь-які пробіли у виявленні переміщення, а потім групуйте переміщені блоки коду в блок, лише якщо зміна пробілів однакова для кожного рядка. Це несумісно з іншими режимами.
-
-
--no-color-moved-ws -
Не ігноруйте пробіли під час виявлення переміщення. Це можна використовувати для перевизначення налаштувань конфігурації. Це те саме, що
--color-moved-ws=no. -
--word-diff[=<mode>] -
За замовчуванням слова розділяються пробілами; див.
--word-diff-regexнижче. <mode> за замовчуванням має значенняplainі має бути одним із:-
color -
Виділяє змінені слова, використовуючи лише кольори. Має на увазі
--color. -
plain -
Показує слова як [
-removed-] та{. Не намагається екранувати роздільники, якщо вони з’являються у вхідних даних, тому вихід може бути неоднозначним.added} -
porcelain -
Використовуйте спеціальний рядковий формат, призначений для використання скриптами. Додані/видалені/незмінені прогони виводяться у звичайному уніфікованому форматі різниці, починаючи з символу
+/-/` ` на початку рядка та продовжуючи до кінця рядка. Перехід на новий рядок у вхідних даних позначається тильдою~на окремому рядку. -
none -
Знову вимкнути різницю слів.
Зверніть увагу, що незважаючи на назву першого режиму, колір використовується для виділення змінених частин у всіх режимах, якщо вони ввімкнені.
-
- --word-diff-regex=<регулярний вираз>
-
Використовуйте <regex>, щоб визначити, що таке слово, замість того, щоб вважати словом рядки, що не є пробілами. Також мається на увазі
--word-diff, якщо ця опція ще не була ввімкнена.Кожен неперекриваючийся збіг <regex> вважається словом. Будь-що між цими збігами вважається пробілом та ігнорується(!) для цілей пошуку відмінностей. Ви можете додати |[
^[:space:]] до вашого регулярного виразу, щоб переконатися, що він відповідає всім символам, які не є пробілами. Збіг, що містить символ нового рядка, непомітно обрізається(!) на місці нового рядка.Наприклад,
--word-diff-regex=.трактуватиме кожен символ як слово та, відповідно, показуватиме відмінності посимвольно.Регулярний вираз також можна встановити за допомогою драйвера різниці або параметра конфігурації, див. gitattributes[5] або git-config[1]. Його явне вказівка перевизначає будь-який драйвер різниці або параметр конфігурації. Драйвери різниці перевизначають параметри конфігурації.
-
--color-words[=<regex>] -
Еквівалентно
--word-diff=colorплюс (якщо було вказано регулярний вираз) --word-diff-regex=<регулярний вираз>. -
--no-renames -
Вимкніть виявлення перейменування, навіть якщо у файлі конфігурації це встановлено за замовчуванням.
-
--[no-]rename-empty -
Чи використовувати порожні блоби як джерело перейменування.
-
--check -
Попереджати, якщо зміни призводять до появи маркерів конфлікту або помилок пробілів. Те, що вважається помилками пробілів, контролюється конфігурацією
core.whitespace. За замовчуванням, кінцеві пробіли (включно з рядками, що складаються виключно з пробілів) та символ пробілу, за яким одразу йде символ табуляції всередині початкового відступу рядка, вважаються помилками пробілів. Виходить з ненульовим статусом, якщо виявлено проблеми. Несумісно з--exit-code. -
--ws-error-highlight=<kind> -
Виділяє помилки пробілів у рядках
context,oldабоnewрізниці. Кілька значень розділяються комами,noneскидає попередні значення,defaultскидає список доnew, аall– це скорочення відold,new,context. Якщо цей параметр не вказано, а змінна конфігураціїdiff.wsErrorHighlightне встановлена, виділяються лише помилки пробілів у рядкахnew. Помилки пробілів забарвлюються за допомогоюcolor.diff.whitespace. -
--full-index -
Замість перших кількох символів, відображати повні назви об’єктів blob до та після зображення в рядку "index" під час створення виводу у форматі патча.
-
--binary -
Окрім
--full-index, виведіть бінарний diff, який можна застосувати за допомогоюgit-apply. Implies--patch. -
--abbrev[=<n>] -
Замість відображення повної 40-байтової шістнадцяткової назви об’єкта у вивідному форматі diff-raw та рядках заголовків diff-tree, відображайте найкоротший префікс довжиною щонайменше <n> шістнадцяткових цифр, який унікально посилається на об’єкт. У вивідному форматі diff-patch
--full-indexмає вищий пріоритет, тобто якщо вказано--full-index, будуть відображатися повні назви блобів незалежно від--abbrev. Кількість цифр, відмінну від стандартної, можна вказати за допомогою--abbrev=<n>. -
-B[<n>][/<m>] -
--break-rewrites[=[<n>][/<m>]] -
Розбийте повні зміни перезапису на пари видалення та створення. Це служить двом цілям:
Це впливає на те, як зміна, яка зводиться до повного перезапису файлу, представляється не як серія видалення та вставки, змішаних разом з дуже невеликою кількістю рядків, які випадково відповідають контексту, а як одне видалення всього старого, за яким слідує одна вставка всього нового, і число <m> контролює цей аспект опції
-B(за замовчуванням 60%).-B/70%вказує, що менше 30% оригіналу має залишитися в результаті, щоб Git вважав це повним перезаписом (тобто інакше отриманий патч буде серією видалення та вставки, змішаних разом з рядками контексту).При використанні з
-M, повністю перезаписаний файл також вважається джерелом перейменування (зазвичай-Mрозглядає лише файл, який зник, як джерело перейменування), а число <n> контролює цей аспект опції-B(за замовчуванням 50%).-B20%вказує, що зміна з додаванням та видаленням порівняно з 20% або більше від розміру файлу може бути розглянута як можливе джерело перейменування на інший файл. -
-M[<n>] -
--find-renames[=<n>] -
Виявлення перейменувань. Якщо вказано <n>, це поріг подібності індекс (тобто кількість додавань/видалень порівняно з розмір файлу). Наприклад,
-M90%означає, що Git повинен враховувати видалити/додати пару для перейменування, якщо більше 90% файлу не змінилося. Без знака%число слід читати як дріб з десятковою комою перед ним. Тобто,-M5стає 0,5, і таким чином те саме, що й-M50%. Аналогічно,-M05це те саме, що й-M5%. Щоб обмежити виявлення точними перейменуваннями, використовуйте-M100%. Індекс подібності за замовчуванням становить 50%. -
-C[<n>] -
--find-copies[=<n>] -
Виявляти копії, а також перейменування. Див. також
--find-copies-harder. Якщо вказано <n>, це має те саме значення, що й-M<n>. -
--find-copies-harder -
З міркувань продуктивності, за замовчуванням, опція
-Cзнаходить копії, лише якщо оригінальний файл копії був змінений у тому ж наборі змін. Цей прапорець змушує команду перевіряти незмінені файли як кандидатів на джерело копії. Це дуже ресурсоємна операція для великих проектів, тому використовуйте її з обережністю. Використання кількох опцій-Cмає той самий ефект. -
-D -
--irreversible-delete -
Пропускайте преобраз для видалення, тобто виводьте лише заголовок, але не різницю між преобразом та
/dev/null. Отриманий патч не призначений для застосування за допомогоюpatchабоgitapply; це виключно для тих, хто хоче зосередитися на перегляді тексту після зміни. Крім того, у виводі явно бракує інформації для застосування такого патчу у зворотному порядку, навіть вручну, звідси й назва опції.При використанні разом з
-B, також пропускається прообраз у частині видалення пари видалення/створення. -
-l<num> -
Опції
-Mта-Cпередбачають деякі попередні кроки, які можуть дешево виявляти підмножини перейменувань/копій, а потім виконується вичерпна резервна частина, яка порівнює всі непарні місця призначення, що залишилися, з усіма відповідними джерелами. (Для перейменувань релевантними є лише непарні джерела, що залишилися; для копій релевантними є всі оригінальні джерела.) Для N джерел та місць призначення ця вичерпна перевірка дорівнює O(N^2). Ця опція запобігає запуску вичерпної частини виявлення перейменування/копіювання, якщо кількість вихідних/цільових файлів перевищує задану кількість. За замовчуванням використовується значенняdiff.renameLimit. Зверніть увагу, що значення 0 вважається необмеженим. -
--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]] -
Вибирати лише файли, які додані (
A), скопійовані (C), видалені (D), змінені (M), перейменовані (R), мають змінений тип (наприклад, звичайний файл, символічне посилання, підмодуль тощо) (T), роз’єднані (U), невідомі (X) або мають розірвану пару (B). Можна використовувати будь-яку комбінацію символів фільтра (включаючи жодного). Коли до комбінації додається*(Все або нічого), усі шляхи вибираються, якщо в порівнянні є файл, який відповідає іншим критеріям; якщо файлів, що відповідають іншим критеріям, немає, нічого не вибирається.Також ці великі літери можна писати вниз, щоб виключити. Наприклад,
--diff-filter=adвиключає додані та видалені шляхи.Зверніть увагу, що не всі різниці можуть відображати всі типи. Наприклад, скопійовані та перейменовані записи не можуть відображатися, якщо виявлення цих типів вимкнено.
-
-S<string> -
Шукає відмінності, які змінюють кількість входжень зазначеного <рядка> (тобто додавання/видалення) у файлі. Призначено для використання скриптером.
Це корисно, коли ви шукаєте точний блок коду (наприклад, структуру) і хочете знати історію цього блоку з моменту його появи: використовуйте цю функцію ітеративно, щоб повернути цікавий блок у прообразі назад у
-S, і продовжуйте, доки не отримаєте першу версію блоку.Також виконується пошук у бінарних файлах.
-
-G<regex> -
Шукайте відмінності, текст виправлення яких містить додані/видалені рядки, що відповідають <regex>.
Щоб проілюструвати різницю між
-S<regex>--pickaxe-regexта-G<regex>, розглянемо коміт з наступною різницею (diff) у тому ж файлі:+ return frotz(nitfol, two->ptr, 1, 0); ... - hit = frotz(nitfol, mf2.ptr, 1, 0);
Хоча git log -G"frotz\(nitfol" покаже цей коміт, git log -S"frotz\(nitfol" --pickaxe-regex ні (оскільки кількість входжень цього рядка не змінилася).
Якщо не вказано параметр
--text, фрагменти бінарних файлів без фільтра textconv будуть ігноруватися.Дивіться запис «pickaxe» у gitdiffcore[7] для отримання додаткової інформації.
-
--find-object=<object-id> -
Шукайте відмінності, які змінюють кількість входжень зазначеного об’єкта. Подібно до
-S, лише аргумент відрізняється тим, що він не шукає певний рядок, а певний ідентифікатор об’єкта.Об’єкт може бути блобом або комітом підмодуля. Це передбачає використання опції
-tуgit-logдля пошуку дерев. -
--pickaxe-all -
Коли
-Sабо-Gзнаходить зміну, показати всі зміни в цьому наборі змін, а не лише файли, що містять зміну в <рядку>. -
--pickaxe-regex -
Обробляти <рядок>, переданий
-S, як розширений регулярний вираз POSIX для збігу. - -O<файл замовлень>
-
Контролюйте порядок, у якому файли відображаються у виводі. Це перевизначає змінну конфігурації
diff.orderFile(див. git-config[1]). Щоб скасуватиdiff.orderFile, використовуйте-O/dev/null.Порядок виведення визначається порядком шаблонів глобусів у <orderfile>. Усі файли зі шляхами, що відповідають першому шаблону, виводяться першими, усі файли зі шляхами, що відповідають другому шаблону (але не першому), виводяться наступними і так далі. Усі файли зі шляхами, що не відповідають жодному шаблону, виводяться останніми, ніби в кінці файлу є неявний шаблон збігу всіх. Якщо кілька шляхів мають однаковий ранг (вони відповідають одному шаблону, але не попереднім шаблонам), їхній порядок виведення відносно один одного є звичайним порядком.
<файл_замовлення> аналізується наступним чином:
-
Пусті рядки ігноруються, тому їх можна використовувати як роздільники для зручності читання.
-
Рядки, що починаються з хеш-символа ("
#"), ігноруються, тому їх можна використовувати для коментарів. Додайте зворотну скісну риску ("\") на початок шаблону, якщо він починається з хеш-символа. -
Кожен інший рядок містить один візерунок.
Шаблони мають той самий синтаксис і семантику, що й шаблони, що використовуються для
fnmatch(3) без прапорцяFNM_PATHNAME, за винятком того, що ім’я шляху також відповідає шаблону, якщо видалення будь-якої кількості компонентів кінцевого імені шляху відповідає шаблону. Наприклад, шаблон "foo*bar" відповідає "fooasdfbar" та "foo/bar/baz/asdf", але не "foobarx". -
-
--skip-to=<файл> -
--rotate-to=<файл> -
Видалити файли перед іменем <файл> з виводу (тобто «перейти до») або перемістити їх у кінець виводу (тобто «повернути до»). Ці опції були винайдені в основному для використання команди
gitdifftoolі можуть бути не дуже корисними в іншому випадку. -
-R -
Поміняти місцями два вхідні дані; тобто показати відмінності між індексним або дисковим файлом та вмістом дерева.
-
--relative[=<шлях>] -
--no-relative -
Під час запуску з підкаталогу проєкту можна наказати програмі виключати зміни за межами каталогу та показувати шляхи відносно нього за допомогою цієї опції. Коли ви не перебуваєте в підкаталозі (наприклад, у чистому репозиторії), ви можете вказати, відносно якого підкаталогу робити вивід, вказавши <шлях> як аргумент.
--no-relativeможна використовувати для скасування як опції конфігураціїdiff.relative, так і попереднього--relative. -
-a -
--text -
Обробляти всі файли як текст.
-
--ignore-cr-at-eol -
Ігноруйте повернення каретки в кінці рядка під час порівняння.
-
--ignore-space-at-eol -
Ігнорувати зміни пробілів в кінці циклу.
-
-b -
--ignore-space-change -
Ігнорувати зміни кількості пробілів. Це ігнорує пробіли в кінці рядка та вважає всі інші послідовності з одного або кількох пробілних символів еквівалентними.
-
-w -
--ignore-all-space -
Ігнорувати пробіли під час порівняння рядків. Це ігнорує відмінності, навіть якщо один рядок має пробіли, а інший їх не має.
-
--ignore-blank-lines -
Ігнорувати зміни, рядки яких порожні.
- -I<регулярний вираз>
- --ignore-matching-lines=<регулярний вираз>
-
Ігнорувати зміни, усі рядки яких відповідають <regex>. Цей параметр можна вказувати більше одного разу.
-
--inter-hunk-context=<number> -
Показує контекст між різницями (diff hanks), до вказаної <кількості> рядків, таким чином об’єднуючи ханки, що знаходяться близько один до одного. За замовчуванням використовується значення
diff.interHunkContextабо 0, якщо параметр конфігурації не встановлено. -
-W -
--function-context -
Показувати всю функцію як рядки контексту для кожної зміни. Назви функцій визначаються так само, як
gitdiffвизначає заголовки патч-хунк (див. "Визначення власного заголовка hunk" у gitattributes[5]). -
--exit-code -
Зробіть так, щоб програма завершилася з кодами, подібними до
diff(1). Тобто, вона завершується з 1, якщо були відмінності, а 0 означає відсутність відмінностей. -
--quiet -
Вимкнути весь вивід програми. Має на увазі
--exit-code. Вимкнути виконання зовнішніх помічників diff, код виходу яких не є довіреним, тобто їх відповідний параметр конфігураціїdiff.trustExitCodeабоdiff.<driver>.trustExitCodeабо змінна середовищаGIT_EXTERNAL_DIFF_TRUST_EXIT_CODEмає значення false. -
--ext-diff -
Дозволити виконання зовнішнього допоміжного засобу різниці. Якщо ви встановлюєте зовнішній драйвер різниці за допомогою gitattributes[5], вам потрібно використовувати цю опцію з git-log[1] та подібними.
-
--no-ext-diff -
Заборонити зовнішні драйвери різниці.
-
--textconv -
--no-textconv -
Дозволити (або заборонити) використання зовнішніх фільтрів перетворення тексту під час порівняння бінарних файлів. Див. gitattributes[5] для отримання детальної інформації. Оскільки фільтри textconv зазвичай є одностороннім перетворенням, отриманий diff придатний для використання людиною, але не може бути застосований. З цієї причини фільтри textconv увімкнено за замовчуванням лише для git-diff[1] та git-log[1], але не для git-format-patch[1] або команд diff plumbing.
-
--ignore-submodules[=(none|untracked|dirty|all)] -
Ігнорувати зміни в підмодулях під час генерації різниці.
allє значенням за замовчуванням. Використанняnoneвважатиме підмодуль зміненим, якщо він містить невідстежувані або змінені файли, або йогоHEADвідрізняється від коміту, записаного в суперпроекті, і може бути використано для перевизначення будь-яких налаштувань опціїignoreв git-config[1] або gitmodules[5]. Коли використовуєтьсяuntracked, підмодулі не вважаються брудними, якщо вони містять лише невідстежуваний контент (але вони все одно скануються на наявність зміненого контенту). Використанняdirtyігнорує всі зміни в робочому дереві підмодулів, відображаються лише зміни в коммітах, що зберігаються в суперпроекті (така поведінка була до версії 1.7.0). Використанняallприховує всі зміни в підмодулях. -
--src-prefix=<prefix> -
Показати вказане джерело <префікс> замість "a/".
-
--dst-prefix=<prefix> -
Показувати вказаний пункт призначення <префікс> замість "b/".
-
--no-prefix -
Не показувати жодного префікса джерела чи призначення.
-
--default-prefix -
Використовуйте префікси джерела та призначення за замовчуванням ("a/" та "b/"). Це замінює змінні конфігурації, такі як
diff.noprefix,diff.srcPrefix,diff.dstPrefixтаdiff.mnemonicPrefix(див. git-config[1]). -
--line-prefix=<prefix> -
Додайте додатковий <префікс> до кожного рядка виводу.
-
--ita-invisible-in-index -
За замовчуванням записи, додані за допомогою
gitadd-N, відображаються як існуючий порожній файл уgitdiffта як новий файл уgitdiff--cached. Ця опція робить запис відображатися як новий файл уgitdiffта як неіснуючий уgitdiff--cached. Цю опцію можна скасувати за допомогою--ita-visible-in-index. Обидва параметри є експериментальними та можуть бути видалені в майбутньому.
Для більш детального пояснення цих поширених опцій див. також gitdiffcore[7].
- <tree-ish>
-
Ідентифікатор об’єкта дерева, з яким потрібно порівняти.
- --cached
-
Не враховуйте файл на диску взагалі.
- --merge-base
-
Замість безпосереднього порівняння <tree-ish>, використовуйте базу злиття між <tree-ish> та HEAD. <tree-ish> має бути комітом.
- -m
-
За замовчуванням файли, записані в індексі, але не витягнуті з реєстру, повідомляються як видалені. Цей прапорець змушує git diff-index повідомляти, що всі невитягнуті файли є оновленими.
Формат виводу RAW
Формат необробленого виводу з git-diff-index, git-diff-tree, git-diff-files та git diff --raw дуже схожий.
Ці команди порівнюють два набори речей; те, що порівнюється, відрізняється:
-
git-diff-index<tree-ish> -
порівнює <дерево-подібне> та файли у файловій системі.
-
git-diff-index--cached<tree-ish> -
порівнює <деревоподібне> та індекс.
-
git-diff-tree[-r] <tree-ish-1> <tree-ish-2> [<pattern>...] -
порівнює дерева, названі двома аргументами.
-
git-diff-files[<візерунок>...] -
порівнює індекс та файли у файловій системі.
Команда git-diff-tree починає свій вивід з друку хешу порівнюваного файлу. Після цього всі команди друкують один рядок виводу для кожного зміненого файлу.
Вивідний рядок форматується таким чином:
in-place edit :100644 100644 bcd1234 0123456 M file0 copy-edit :100644 100644 abcd123 1234567 C68 file1 file2 rename-edit :100644 100644 abcd123 1234567 R86 file1 file3 create :000000 100644 0000000 1234567 A file4 delete :100644 000000 1234567 0000000 D file5 unmerged :000000 000000 0000000 0000000 U file6
Тобто, зліва направо:
-
a colon.
-
режим для "src"; 000000, якщо створення або роз’єднання.
-
a space.
-
режим для "dst"; 000000, якщо видалення або роз’єднання.
-
a space.
-
sha1 для "src"; 0{40} якщо створення або роз’єднання.
-
a space.
-
sha1 для "dst"; 0{40} якщо видалення, роз’єднання або "робоче дерево не синхронізоване з індексом".
-
a space.
-
статус, а потім необов’язкове число «оцінки».
-
символ табуляції або NUL, коли використовується опція
-z. -
шлях для "src"
-
символ табуляції або NUL, коли використовується опція
-z; існує лише для C або R. -
шлях для "dst"; існує лише для C або R.
-
LF або NUL, коли використовується опція
-z, для завершення запису.
Можливі статусні літери:
-
A: додавання файлу -
C: копіювання файлу в новий -
D: видалення файлу -
M: зміна вмісту або режиму файлу -
R: перейменування файлу -
T: зміна типу файлу (звичайний файл, символічне посилання або підмодуль) -
U: файл роз’єднано (ви повинні завершити об’єднання, перш ніж його можна буде зафіксувати) -
X: тип зміни "невідомий" (скоріше за все, це помилка, будь ласка, повідомте про неї)
За літерами статусу C та R завжди йде оцінка (що позначає відсоток подібності між джерелом та цільовим об’єктом переміщення або копіювання). За літерою статусу M може йти оцінка (що позначає відсоток відмінності) для перезаписів файлів.
SHA1 для "dst" відображається як суцільні нулі, якщо файл у файловій системі не синхронізований з індексом.
Приклад:
:100644 100644 5be4a4a 0000000 M file.c
Без опції -z шляхи з "незвичайними" символами взяті в лапки, як пояснено для змінної конфігурації core.quotePath (див. git-config[1]). При використанні -z ім’я файлу виводиться дослівно, а рядок завершується байтом NUL.
формат diff для злиття
git-diff-tree, git-diff-files та git-diff --raw можуть приймати опцію -c або --cc для генерації виводу diff також для комітів злиття. Вивід відрізняється від формату, описаного вище, наступним чином:
-
для кожного з батьків є двокрапка
-
є більше режимів "src" та "src" sha1
-
статус — це об’єднані символи статусу для кожного батьківського елемента
-
немає додаткового числа "оцінка"
-
шлях(и) до файлу, розділені табуляцією
Для -c та --cc відображається лише кінцевий шлях, навіть якщо файл було перейменовано на будь-якому етапі історії. З --combined-all-paths відображається назва шляху в кожному батьківському файлі, а потім назва шляху в коміті злиття.
Приклади для -c та --cc без --combined-all-paths:
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c ::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM bar.sh ::100644 100644 100644 e07d6c5 9042e82 ee91881 RR phooey.c
Приклади, коли --combined-all-paths додається до -c або --cc:
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c desc.c desc.c ::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM foo.sh bar.sh bar.sh ::100644 100644 100644 e07d6c5 9042e82 ee91881 RR fooey.c fuey.c phooey.c
Зверніть увагу, що «об’єднана різниця» відображає лише файли, які були змінені з усіх батьківських файлів.
Генерація тексту патча за допомогою -p
Виконання команд git-diff[1], git-log[1], git-show[1], git-diff-index[1], git-diff-tree[1] або git-diff-files[1] з опцією -p створює текст патча. Ви можете налаштувати створення тексту патча за допомогою змінних середовища GIT_EXTERNAL_DIFF та GIT_DIFF_OPTS (див. git[1]), а також атрибута diff (див. gitattributes[5]).
Те, що видається опцією -p, дещо відрізняється від традиційного формату diff:
-
Йому передує заголовок "git diff", який виглядає так:
diff --git a/file1 b/file2
Імена файлів
a/таb/однакові, якщо не йдеться про перейменування/копіювання. Зокрема, навіть для створення або видалення/dev/nullне використовується замість імен файлівa/абоb/.Коли йдеться про перейменування/копіювання,
file1таfile2показують відповідно назву вихідного файлу перейменування/копіювання та назву файлу, який створюється в результаті перейменування/копіювання. -
За ним йде один або декілька розширених рядків заголовка:
старий режим <режим> новий режим <режим> видалений файл режим <режим> новий файл режим <режим> копіювати з <шлях> копіювати до <шлях> перейменувати з <шлях> перейменувати в <шлях> індекс подібності <номер> індекс несхожості <номер> індекс <хеш>..<хеш> <режим>
Режими файлів <режим> друкуються як 6-значні вісімкові числа, включаючи тип файлу та біти прав доступу до файлу.
Імена шляхів у розширених заголовках не містять префіксів
a/таb/.Індекс подібності – це відсоток незмінених рядків, а індекс несхожості – відсоток змінених рядків. Це округлене до меншого значення ціле число, за яким стоїть знак відсотка. Значення індексу подібності 100% таким чином зарезервовано для двох однакових файлів, тоді як несхожість 100% означає, що жоден рядок зі старого файлу не потрапив до нового.
Рядок індексу містить імена блоб-об’єктів до та після зміни. <mode> додається, якщо режим файлу не змінюється; інакше окремі рядки вказують на старий та новий режими.
-
Шляхи з «незвичайними» символами взяті в лапки, як пояснено для змінної конфігурації
core.quotePath(див. git-config[1]). -
Усі файли
file1у виводі посилаються на файли до коміту, а всі файлиfile2посилаються на файли після коміту. Неправильно застосовувати кожну зміну до кожного файлу послідовно. Наприклад, цей патч поміняє місцями a та b:diff --git a/a b/b rename from a rename to b diff --git a/b b/a rename from b rename to a
-
У заголовках ханка згадується назва функції, до якої застосовується ханк. Див. "Визначення власного заголовка ханка" в gitattributes[5] для отримання детальної інформації про те, як налаштувати це для певних мов.
Комбінований формат різниці
Будь-яка команда, що генерує різниці, може використовувати опцію -c або --cc для створення «об’єднаної різниці» під час показу злиття. Це формат за замовчуванням під час показу злиття за допомогою git-diff[1] або git-show[1]. Також зауважте, що ви можете надати відповідну опцію --diff-merges будь-якій із цих команд, щоб примусово генерувати різниці у певному форматі.
Формат "комбінованої різниці" виглядає так:
diff --combined describe.c
index fabadb8,cc95eb0..4866510
--- a/describe.c
+++ b/describe.c
@@@ -98,20 -98,12 +98,20 @@@
return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1;
}
- static void describe(char *arg)
-static void describe(struct commit *cmit, int last_one)
++static void describe(char *arg, int last_one)
{
+ unsigned char sha1[20];
+ struct commit *cmit;
struct commit_list *list;
static int initialized = 0;
struct commit_name *n;
+ if (get_sha1(arg, sha1) < 0)
+ usage(describe_usage);
+ cmit = lookup_commit_reference(sha1);
+ if (!cmit)
+ usage(describe_usage);
+
if (!initialized) {
initialized = 1;
for_each_ref(get_name);
-
Йому передує заголовок "git diff", який виглядає ось так (коли використовується опція
-c):diff --combined file
або ось так (коли використовується опція
--cc):diff --cc file
-
За ним йде один або декілька розширених рядків заголовка (у цьому прикладі показано злиття з двома батьківськими об’єктами):
індекс <hash>,<hash>..<hash> режим <mode>,<mode>..<mode> новий файловий режим <mode> режим видаленого файлу <mode>,<mode>
Рядок
mode<mode>,<mode>..<mode> з’являється лише тоді, коли хоча б один з <mode> відрізняється від решти. Розширені заголовки з інформацією про виявлене переміщення контенту (перейменування та виявлення копіювання) розроблені для роботи з diff двох <tree-ish> і не використовуються комбінованим форматом diff. -
Далі йде дворядковий заголовок from-file/to-file:
--- a/файл +++ б/файл
Подібно до дворядкового заголовка для традиційного «уніфікованого» формату diff,
/dev/nullвикористовується для сигналізації про створені або видалені файли.Однак, якщо вказано опцію --combined-all-paths, замість дворядкового заголовка from-file/to-file ви отримаєте N+1 рядковий заголовок from-file/to-file, де N — кількість батьківських об’єктів у коміті злиття:
--- a/файл --- a/файл --- a/файл +++ б/файл
Цей розширений формат може бути корисним, якщо активовано виявлення перейменування або копіювання, щоб дозволити вам бачити оригінальну назву файлу в різних батьківських об’єктах.
-
Формат заголовка фрагмента змінено, щоб запобігти випадковому передаванню його до
patch-p1. Комбінований формат різниці був створений для перегляду змін у комітах злиття та не призначався для застосування. Зміна подібна до зміни в розширеному заголовку index:@@@ <from-file-range> <from-file-range> <to-file-range> @@@
У заголовку фрагмента є (кількість батьківських об’єктів + 1) символи
@для комбінованого формату різниці.
На відміну від традиційного «уніфікованого» формату порівняння, який показує два файли A та B з одним стовпцем із префіксом - (мінус — з’являється в A, але видалений в B), + (плюс — відсутній в A, але доданий до B) або " " (пробіл — без змін), цей формат порівнює два або більше файлів file1, file2,… з одним файлом X та показує, чим X відрізняється від кожного з fileN. Один стовпець для кожного з fileN додається до рядка виводу, щоб відзначити, чим рядок X відрізняється від нього.
Символ - у стовпці N означає, що рядок з’являється у файлі N, але не з’являється в результаті. Символ + у стовпці N означає, що рядок з’являється в результаті, а файл N не містить цього рядка (іншими словами, рядок було додано з точки зору батьківського об’єкта).
У наведеному вище прикладі виводу сигнатуру функції було змінено з обох файлів (отже, два видалення символів - з файлу file1 та файлу file2, плюс ++, що означає, що один доданий рядок не відображається ні у файлі file1, ні у файлі file2). Також, вісім інших рядків є такими ж з файлу file1, але не відображаються у файлі file2 (отже, з префіксом +).
Коли відображається за допомогою git diff-tree -c, він порівнює батьківські об’єкти коміту злиття з результатом злиття (тобто file1..fileN є батьками). Коли відображається за допомогою git diff-files -c, він порівнює два невирішені батьківські об’єкти злиття з робочим файлом дерева (тобто file1 — це етап 2, також відомий як "наша версія", file2 — це етап 3, також відомий як "їхня версія").
інші формати різниці
Опція --summary описує щойно додані, видалені, перейменовані та скопійовані файли. Опція --stat додає графік diffstat(1) до виводу. Ці опції можна комбінувати з іншими опціями, такими як -p, і вони призначені для використання людиною.
Під час відображення зміни, що включає перейменування або копіювання, вивід --stat форматує шляхи компактно, поєднуючи спільний префікс та суфікс шляхів. Наприклад, зміна, яка переміщує arch/i386/Makefile на arch/x86/Makefile під час модифікації 4 рядків, буде відображена так:
arch/{i386 => x86}/Makefile | 4 +--
Опція --numstat надає інформацію diffstat(1), але вона розроблена для легшого використання машиною. Запис у виводі --numstat виглядає так:
1 2 README
3 1 arch/{i386 => x86}/Makefile
Тобто з, зліва направо:
-
кількість доданих рядків;
-
вкладка;
-
кількість видалених рядків;
-
вкладка;
-
шлях (можливо, з інформацією про перейменування/копіювання);
-
новий рядок.
Коли активовано опцію виводу -z, вивід форматується таким чином:
1 2 README NUL 3 1 NUL arch/i386/Makefile NUL arch/x86/Makefile NUL
Тобто:
-
кількість доданих рядків;
-
вкладка;
-
кількість видалених рядків;
-
вкладка;
-
NUL (існує лише якщо перейменовано/скопійовано);
-
ім’я шляху в прообразі;
-
NUL (існує лише якщо перейменовано/скопійовано);
-
шлях у postimage (існує лише якщо перейменовано/скопійовано);
-
NUL.
Додатковий NUL перед шляхом преобразу у випадку перейменування дозволяє скриптам, які читають вивід, визначити, чи є поточний запис, що читається, записом з одним шляхом, чи записом перейменування/копіювання без попереднього читання. Після читання доданих та видалених рядків, читання до NUL дасть ім’я шляху, але якщо це NUL, запис покаже два шляхи.
РЕЖИМИ РОБОТИ
Ви можете вибрати, чи повністю довіряти індексному файлу (використовуючи прапорець --cached), чи попросити логіку diff показувати будь-які файли, які не відповідають стану stat, як "попередньо змінені". Обидві ці операції справді дуже корисні.
КЕШОВАНИЙ РЕЖИМ
Якщо вказано --cached, це дозволяє запитувати:
покажіть мені відмінності між HEAD та поточним індексом вміст (той, який я б написав за допомогою 'git write-tree')
Наприклад, припустимо, що ви попрацювали над своїм робочим каталогом, оновили деякі файли в індексі та готові до коміту. Ви хочете точно побачити, що ви збираєтеся комітити, без необхідності писати новий об’єкт дерева та порівнювати його таким чином, і для цього ви просто робите
git diff-index --cached HEAD
Приклад: скажімо, я перейменував commit.c на git-commit.c та виконав update-index, щоб це вплинуло на файл індексу. git diff-files взагалі нічого не покаже, оскільки файл індексу відповідає моєму робочому каталогу. Але виконання git diff-index призведе до:
torvalds@ppc970:~/git> git diff-index --cached HEAD :100644 000000 4161aecc6700a2eb579e842af0b7f22b98443f74 0000000000000000000000000000000000000000 D commit.c :000000 100644 0000000000000000000000000000000000000000 4161aecc6700a2eb579e842af0b7f22b98443f74 A git-commit.c
Ви можете легко побачити, що вищезгадане є перейменуванням.
Фактично, git diff-index --cached має завжди бути повністю еквівалентним фактичному виконанню git write-tree та його порівнянню. За винятком того, що цей варіант набагато зручніший для випадку, коли ви просто хочете перевірити, де ви знаходитесь.
Отже, виконання команди git diff-index --cached дуже корисне, коли ви запитуєте себе: «що я вже позначив для коміту, і яка різниця з попереднім деревом».
НЕКЕШОВАНИЙ РЕЖИМ
Режим «без кешування» використовує інший підхід і потенційно є кориснішим з
двох, оскільки його дії не можна емулювати за допомогою «git write-tree»
«git diff-tree». Таким чином, це режим за замовчуванням. Версія без
кешування ставить таке питання:
Покажіть мені відмінності між HEAD та поточним взяттям дерево - вміст індексу _та_ файли, які не оновлені
що, очевидно, також дуже корисне питання, оскільки воно говорить вам про те, що ви можете закомітити. Знову ж таки, вивід точно відповідає виводу git diff-tree -r, але з невеликою родзинкою.
Різниця полягає в тому, що якщо якийсь файл не відповідає індексу, у нас немає резервного сховища для нього, і ми використовуємо магічний sha1 з "все-нульовим" кодом, щоб це показати. Отже, припустимо, що ви відредагували kernel/sched.c, але ще не виконали для нього git update-index — з новим станом не пов’язано жодного "об’єкта", і ви отримуєте:
torvalds@ppc970:~/v2.6/linux> git diff-index --abbrev HEAD :100644 100644 7476bb5ba 000000000 M kernel/sched.c
тобто, це показує, що дерево змінилося, і що kernel/sched.c не оновлений і може містити нові дані. Нульовий sha1 означає, що для отримання справжньої різниці потрібно безпосередньо переглянути об’єкт у робочому каталозі, а не виконувати різницю між об’єктами.
|
Note
|
Як і інші команди цього типу, git diff-index насправді взагалі не переглядає вміст файлу. Тож, можливо, kernel/sched.c насправді не змінився, а просто ви його торкнулися. У будь-якому випадку, варто зазначити, що вам потрібно виконати git update-index, щоб синхронізувати індекс.
|
|
Note
|
Ви можете мати різні файли, що відображаються одночасно як «оновлено» та «все ще пошкоджено в робочому каталозі». Ви завжди можете визначити, який файл у якому стані, оскільки файли зі статусом «оновлено» показують дійсний sha1, а файли зі статусом «не синхронізовано з індексом» завжди матимуть спеціальний sha1 з усіма нулями. |
GIT
Частина набору git[1]