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.53.0
2026-02-02
- 2.45.1 → 2.52.0 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.40.1 → 2.42.4 no changes
-
2.40.0
2023-03-12
- 2.39.1 → 2.39.5 no changes
-
2.39.0
2022-12-12
- 2.35.1 → 2.38.5 no changes
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.8 no changes
-
2.34.0
2021-11-15
- 2.31.1 → 2.33.8 no changes
-
2.31.0
2021-03-15
- 2.30.2 → 2.30.9 no changes
-
2.30.1
2021-02-08
- 2.24.1 → 2.30.0 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.19.1 → 2.20.5 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 no changes
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
- 2.12.5 no changes
-
2.11.4
2017-09-22
- 2.7.6 → 2.10.5 no changes
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
- 2.3.10 no changes
-
2.2.3
2015-09-04
- 2.1.4 no changes
-
2.0.5
2014-12-17
ОПИС
Показує шляхи, у яких є розбіжності між індексним файлом і поточним комітом HEAD; шляхи, у яких є розбіжності між робочим деревом і індексним файлом; а також шляхи в робочому дереві, які не відстежуються Git (і не ігноруються за допомогою gitignore[5]). Перші — це те, що ви мали б зафіксувати, виконавши команду git commit; другі та треті — це те, що ви могли б зафіксувати, виконавши команду git add перед виконанням git commit.
ОПЦІЇ
-
-s -
--short -
Надавати результат у скороченому форматі.
-
-b -
--branch -
Показувати інформацію про гілку та інформацію про відстеження навіть у скороченому форматі.
-
--show-stash -
Показати кількість записів, що наразі зберігаються в сховищі stash.
-
--porcelain[=<version>] -
Надавати вихідні дані у форматі, зручному для обробки скриптами. Це схоже на стислий вивід, але залишатиметься незмінним у різних версіях Git та незалежно від налаштувань користувача. Детальніше див. нижче.
Параметр <version> використовується для визначення версії формату. Є опціональним, стандартним значенням є формат оригінальної версії —
v1. -
--long -
Виводити результат у розгорнутому форматі. Це стандартне значення.
-
-v -
--verbose -
Окрім назв файлів, які було змінено, також показувати текстові зміни, які підготовлені для фіксації (тобто, як у виводі
gitdiff--cached). Якщо-vвказано двічі, тоді також показувати зміни в робочому дереві, які ще не знаходяться в stage (тобто, як у виводіgitdiff). -
-u[<режим>] -
--untracked-files[=<режим>] -
Показує файли, які не відстежуютьтся в репозиторії.
Параметр mode використовується для визначення обробки не відстежуваних файлів. Є опціональним, стандартне значення —
all, коли його вказано, він має бути приєднаний до параметра (наприклад,-uno, але не-uno).Можливі варіанти:
Якщо опція
-uне використовується, відображаються файли та теки, що не відстежуються (тобто це те саме, що вказатиnormal), щоб ви не забули додати новостворені файли. Оскільки пошук файлів, що не відстежуються, у файловій системі вимагає додаткових зусиль, у великому робочому дереві цей режим може зайняти деякий час. Розгляньте можливість увімкнення кешу невідстежуваних файлів та розділеного індексу, якщо це підтримується (див.gitupdate-index--untracked-cacheтаgitupdate-index--split-index). В іншому випадку ви можете використовуватиno, щобgitstatusповертав результати швидше, не показуючи невідстежуваних файлів. Усі звичайні написання булевого значенняtrueтрактуються якnormal, аfalse— якno.Стандартне значення можна змінити за допомогою змінної конфігурації
status.showUntrackedFiles, описаної в документації git-config[1]. -
--ignore-submodules[=<when>] -
Ігнорувати зміни в субмодулях під час пошуку змін. <when> може мати значення
none,untracked,dirtyабоall, яке є стандартним значенням.-
none -
вважати субмодуль зміненим, якщо він містить невідстежувані або змінені файли, або його HEAD відрізняється від коміту, записаного в суперпроєкті, і може бути використаний для перевизначення будь-яких налаштувань опції
ignoreв git-config[1] або gitmodules[5]. -
untracked -
субмодулі не вважаються зміненими (dirty), якщо вони містять лише вміст, що не відстежується (проте вони все одно скануються на наявність зміненого вмісту).
-
dirty -
ігнорувати всі зміни в робочому дереві субмодулів, відображаються лише зміни в комітах, що зберігаються в суперпроєкті (така поведінка була до версії 1.7.0).
-
all -
приховувати всі зміни в субмодулях (та придушувати вивід підсумків для субмодулів, коли встановлено параметр конфігурації
status.submoduleSummary).
-
-
--ignored[=<mode>] -
Також показувати ігноровані файли.
Параметр mode використовується для визначення обробки ігнорованих файлів. Є опціональним, стандартне значення —
traditional.Можливі варіанти:
-
traditional -
Показувати ігноровані файли та теки, якщо не вказано
--untracked-files=all, у такому разі відображаються окремі файли в ігнорованих теках. -
no -
Не показувати ігноровані файли.
-
matching -
Показувати ігноровані файли та теки, що відповідають шаблону ігнорування.
Відображаються шляхи, які явно відповідають шаблону ігнорування. Якщо тека збігається з шаблоном ігнорування, вона відображається, але шляхи, що містяться в цій теці, не відображаються. Якщо тека не збігається з шаблоном ігнорування, але весь її вміст ігнорується, то сама тека не відображається, але весь її вміст відображається.
-
-
-z -
Завершувати записи символом NUL замість LF. Це має на увазі формат виводу
--porcelain=v1, якщо не вказано інший формат. -
--column[=<опція>] -
--no-column -
Показувати файли, що не відстежуються, у стовпцях. Синтаксис параметрів див. у змінній конфігурації
column.status. Параметри--columnта--no-columnбез додаткових опцій відповідають значеннямalwaysтаneverвідповідно. -
--ahead-behind -
--no-ahead-behind -
Показувати або ні детальні показники відставання/випередження гілки відносно її висхідної (upstream) гілки. Стандартне значення —
true. -
--renames -
--no-renames -
Увімкнути/вимкнути виявлення перейменування незалежно від налаштувань користувача. Див. також git-diff[1]
--no-renames. -
--find-renames[=<n>] -
Увімкнути виявлення перейменування, за бажанням встановивши поріг подібності. Див. також git-diff[1]
--find-renames. - <pathspec>...
-
Див. довідку pathspec у gitglossary[7].
ВИВІД
Вивід цієї команди призначений для використання як коментар шаблону коміту. Стандартний, довгий формат розроблений таким чином, щоб бути зрозумілим людині, докладним та описовим. Його вміст та формат можуть бути змінені в будь-який час.
Шляхи, згадані у виводі, на відміну від багатьох інших команд Git, створюються відносно поточної теки, якщо ви працюєте в субтеці (це зроблено навмисно, щоб полегшити копіювання та вставку). Дивіться параметр конфігурації status.relativePaths нижче.
Короткий формат
У скороченому форматі статус кожного шляху відображається в одній з цих форм
<xy> <path> <xy> <orig-path> -> <path>
де <orig-path> — це походження перейменованого/скопійованого вмісту. <orig-path> відображається лише тоді, коли запис перейменовано або скопійовано. <xy> — це дволітерний код стану XY.
Поля (включно з ->) відокремлюються одне від одного одним пробілом. Якщо ім’я файлу містить пробіли або інші недруковані символи, це поле буде взято в лапки, як у рядковому літералі мови C: воно оточується подвійними лапками ASCII (34), а внутрішні спеціальні символи замінюються на символи з екрануванням у вигляді зворотної косої риски.
Існує три різні типи станів, що відображаються за допомогою цього формату, і кожен з них використовує синтаксис <xy> по-різному:
-
Коли відбувається злиття, і воно пройшло успішно, або поза межами злиття, у цій ситуації
Xпоказує стан індексу, аYпоказує стан робочого дерева. -
Коли виник конфлікт злиття, який ще не вирішено,
XтаYпоказують стан, запроваджений кожною вершиною гілок злиття, відносно спільного предка. Ці шляхи називаються незлитими. -
Коли шлях не відстежується,
XтаYзавжди однакові, оскільки індекс про них не знає. Для невідстежуваних шляхів використовується ??. Ігноровані файли не відображаються у списку, якщо не використовується параметр--ignored; у цьому випадку, ігноровані файли позначаються!!.
Зверніть увагу, що термін merge тут також включає перебазування з використанням стандартно стратегії --merge , копіювання комітів (cherry-pick) та будь-що інше, що використовує механізм злиття.
У наступній таблиці ці три класи показано в окремих розділах, а ці символи використовуються для полів X та Y для перших двох розділів, які показують відстежувані шляхи:
| X | Y | Значення |
|---|---|---|
[ |
не оновлено |
|
|
[ |
оновлено в індексі |
|
[ |
тип змінено в індексі |
|
[ |
додано до індексу |
|
видалено з індексу |
|
|
[ |
перейменовано в індексі |
|
[ |
скопійовано в індексі |
[ |
індекс і робоче дерево збігаються |
|
[ |
|
робоче дерево змінено з моменту додавання в індекс |
[ |
|
тип змінено в робочому дереві з моменту додавання в індекс |
[ |
|
видалено в робочому дереві |
|
перейменовано в робочому дереві |
|
|
скопійовано в робочому дереві |
|
|
|
необʼєднано, обидва видалені |
|
|
необʼєднано, додано нами |
|
|
необʼєднано, видалено ними |
|
|
необʼєднано, додано ними |
|
|
необʼєднано, видалено нами |
|
|
необʼєднано, обидва додані |
|
|
необʼєднано, обидва змінені |
? |
? |
не відстежується |
|
|
ігнорується |
Субмодулі мають більше станів і замість цього повідомляють
Це пояснюється тим, що змінений контент або невідстежувані файли в субмодулі не можна додати через git add у суперпроєкті для підготовки коміту.
m та ? застосовуються рекурсивно. Наприклад, якщо вкладений субмодуль у субмодулі містить невідстежуваний файл, це також повідомляється як ?.
Якщо використовується опція -b, перед статусом у стислому форматі йде рядок
{empty}## <branchname> <tracking-info>
Формат Porcelain, версія 1
Формат Porcelain версії 1 схожий на короткий формат, але гарантовано не змінюється у спосіб, що унеможливлює зворотну сумісність між версіями Git або залежно від налаштувань користувача. Це робить його ідеальним для обробки скриптами. Опис короткого формату, наведений вище, також стосується формату Porcelain, за кількома винятками:
-
Налаштування користувача
color.statusне враховується; колір завжди буде вимкнено. -
Налаштування користувача
status.relativePathsне враховується; показані шляхи завжди будуть відносними до кореневої теки репозиторію.
Також існує альтернативний формат -z, рекомендований для обробки машиною. У цьому форматі поле статусу залишається незмінним, але деякі інші елементи змінюються. По-перше, у записах про перейменування опускається символ ->, а порядок полів змінюється на зворотний (наприклад, from -> to стає to from). По-друге, за кожним іменем файлу йде NUL (ASCII 0), що замінює пробіл як роздільник полів та завершальний символ нового рядка (але пробіл все ще відокремлює поле статусу від першого імені файлу). По-третє, імена файлів, що містять спеціальні символи, не форматуються окремо; не застосовуються лапки чи екранування за допомогою зворотної косої риски.
Будь-які зміни субмодулів показуються як зміни M замість m або одинарного ?.
Формат Porcelain, версія 2
Формат версії 2 додає детальнішу інформацію про стан робочого дерева та змінені елементи. Версія 2 також визначає розширюваний набір простих для розбору опціональних заголовків.
Заголовки починаються з символу # та додаються у відповідь на певні аргументи командного рядка. Парсери повинні ігнорувати заголовки, які вони не розпізнають.
Заголовки гілок
Якщо вказано --branch, виводиться серія рядків заголовка з інформацією про поточну гілку.
| Рядок | Примітки |
|---|---|
|
Поточний коміт. |
|
Поточна гілка. |
|
Якщо встановлено upstream. |
|
Якщо встановлено upstream і коміт присутній. |
Інформація про Stash
Якщо вказано --show-stash, виводиться один рядок, який показує кількість записів stash, якщо вони не нульові:
# stash <N>
Змінені відстежувані елементи
За заголовками виводиться низка рядків, що містять відстежувані записи. Для опису запису може використовуватися один із трьох різних форматів рядків, залежно від типу зміни. Відстежувані записи виводяться у довільному порядку; парсери повинні враховувати можливість поєднання цих трьох типів рядків у будь-якому порядку.
Звичайні змінені записи мають такий формат:
1 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <path>
Перейменовані або скопійовані записи мають такий формат:
2 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <X><score> <path><sep><origPath>
| Поле | Значення |
|---|---|
<XY> |
Поле з 2 символів, що містить значення XY, які включені та не включені до stage, у короткому форматі, де незмінені значення позначаються крапкою, а не пробілом. |
<sub> |
Поле з 4 символів, що описує стан субмодуля. |
"N…" коли запис не є субмодулем. |
|
<mH> |
Вісімковий режим файлу в HEAD. |
<mI> |
Вісімковий режим файлу в індексі. |
<mW> |
Вісімковий режим файлу в робочому дереві. |
<hH> |
Імʼя обʼєкта в HEAD. |
<hI> |
Імʼя обʼєкта в індексі. |
<X><score> |
Оцінка перейменування або копіювання (що позначає відсоток подібності між джерелом та цільовим обʼєктом переміщення або копіювання). Наприклад, "R100" або "C75". |
<path> |
Шлях. У перейменованому/скопійованому записі це цільовий шлях. |
<sep> |
Коли використовується параметр |
<origPath> |
Шлях у коміті в HEAD або в індексі. Присутній лише у перейменованому/скопійованому записі та вказує, звідки взявся перейменований/скопійований вміст. |
Необʼєднані записи мають такий формат; перший символ — це «u», щоб відрізнити їх від звичайних змінених записів.
u <XY> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <path>
| Поле | Значення |
|---|---|
<XY> |
2-символьне поле, що описує тип конфлікту як описано в короткому форматі. |
<sub> |
4-символьне поле, що описує стан субмодуля як описано вище. |
<m1> |
Вісімковий режим файлу в stage 1. |
<m2> |
Вісімковий режим файлу в stage 2. |
<m3> |
Вісімковий режим файлу в stage 3. |
<mW> |
Вісімковий режим файлу в робочому дереві. |
<h1> |
Імʼя обʼєкта в stage 1. |
<h2> |
Імʼя обʼєкта в stage 2. |
<h3> |
Імʼя обʼєкта в stage 3. |
<шлях> |
Імʼя шляху. |
Інші елементи
Після виведення відстежуваних записів (а також за запитом) буде виведено ряд рядків, що містять невідстежувані, а потім ігноровані елементи, знайдені в робочому дереві.
Невідстежувані елементи мають такий формат:
? <path>
Ігноровані елементи мають такий формат:
! <path>
Примітки щодо формату імені шляху та -z
Коли вказано опцію -z, шляхи виводяться як є та без лапок, а рядки завершуються байтом NUL (ASCII 0x00).
Без опції -z шляхи з "незвичайними" символами беруться в лапки, як пояснено для змінної конфігурації core.quotePath (див. git-config[1]).
КОНФІГУРАЦІЯ
Команда враховує змінні конфігурації color.status (або status.color — вони означають одне й те саме, і остання зберігається для зворотної сумісності) та color.status.<slot> для кольорового виводу.
Якщо для конфігураційної змінної status.relativePaths встановлено значення false, то всі вказані шляхи є відносними до кореня репозиторію, а не до поточної теки.
Якщо для параметра status.submoduleSummary встановлено значення, відмінне від нуля, або значення true (що еквівалентно -1 або необмеженій кількості), у довгому форматі буде ввімкнено підсумок щодо субмодулів, і буде показано підсумок комітів для змінених субмодулів (див. опцію --summary-limit команди git-submodule[1]). Зверніть увагу, що виведення підсумку з команди status буде приховано для всіх субмодулів, якщо diff.ignoreSubmodules встановлено на all, або лише для тих субмодулів, де submodule.<name>.ignore=all. Щоб також переглянути підсумок для ігнорованих субмодулів, ви можете використати або опцію командного рядка --ignore-submodules=dirty, або команду “git submodule summary”, яка показує подібний вивід, але не враховує ці налаштування.
ФОНОВЕ ОНОВЛЕННЯ
Стандартно git status автоматично оновлює індекс, оновлюючи кешовану інформацію про стан з робочого дерева та записуючи результат. Запис оновленого індексу є оптимізацією, яка не є строго необхідною (status обчислює ці значення самостійно, але записує їх лише для того, щоб позбавити наступні програми від необхідності повторювати ці обчислення). Коли status запускається у фоновому режимі, блокування, що утримується під час запису, може конфліктувати з іншими одночасними процесами, що призведе до їхнього збою. Скрипти, що запускають status у фоновому режимі, повинні розглянути можливість використання git --no-optional-locks status (детальніше див. git[1]).
ФАЙЛИ, ЩО НЕ ВІДСТЕЖУЮТЬСЯ ТА ПРОДУКТИВНІСТЬ
Команда git status може бути дуже повільною у великих робочих деревах, якщо/коли потрібно шукати файли та теки, що не відстежуються. Існує багато опцій конфігурації, які дозволяють пришвидшити цей процес, або уникаючи цієї роботи, або використовуючи кешовані результати попередніх команд Git. Не існує єдиного оптимального набору налаштувань, який підходить усім. Ми наведемо короткий опис відповідних опцій, щоб допомогти вам, але перш ніж переходити до списку, можливо, ви захочете запустити git status ще раз, оскільки ваша конфігурація вже може кешувати результати git status, тому наступні запуски можуть бути швидшими.
-
Прапорець
--untracked-files=noабо налаштуванняstatus.showUntrackedFiles=no(див. вище для обох): вказує, що командаgitstatusне повинна повідомляти про файли, які не відстежуються. Це найшвидший варіант.gitstatusне відображатиме файли, що не відстежуються, тому вам слід пам’ятати про створення нових файлів і вручну додавати їх за допомогою командиgitadd. -
advice.statusUoption=false(див. git-config[1]): встановлення цієї змінної наfalseвимикає попередження, яке виводиться, коли перерахування невідстежуваних файлів займає більше 2 секунд. У великому проєкті це може зайняти більше часу, і користувач, можливо, вже погодився на компроміс (наприклад, використання-unoможе бути неприйнятним варіантом для користувача), у такому разі немає сенсу виводити попередження, і в такому випадку найкращим рішенням може бути його відключення. -
core.untrackedCache=true(див. git-update-index[1]): вмикає функцію кешування не відстежуваних файлів, щоб шукати лише ті теки, які були змінені з моменту виконання попередньої командиgitstatus. Git запамʼятовує набір файлів, що не відстежуються, у кожній теці та припускає, що якщо тека не змінювалася, то набір файлів, що не відстежуються, у ній також не змінився. Це значно швидше, ніж перебирати вміст кожної теки, але все одно має свої витрати, оскільки Git все одно мусить шукати набір змінених тек. Кеш невідстежуваних файлів зберігається у файлі.git/index. Зменшення витрат на пошук невідстежуваних файлів дещо компенсується збільшенням розміру індексу та витратами на його оновлення. Зазвичай скорочення часу пошуку виправдовує збільшення розміру. -
core.untrackedCache=trueтаcore.fsmonitor=trueабоcore.fsmonitor=<hook-command-pathname> (див. git-update-index[1]): вмикає як кеш для файлів, що не відстежуються, так і функцію FSMonitor, і здійснює пошук лише в тих теках, які були змінені з моменту виконання попередньої командиgitstatus. Це швидше, ніж використання лише кешу для файлів, що не відстежуються, оскільки Git також може уникнути пошуку змінених тек. Git має просто перерахувати точний набір тек, які нещодавно зазнали змін. Хоча функцію FSMonitor можна ввімкнути без кешу для файлів, що не відстежуються, у цьому випадку її переваги значно зменшуються.
Зверніть увагу, що після увімкнення функцій для відстеження кешу та/або FSMonitor може знадобитися кілька команд git status, щоб різні кеші «розігрілися», перш ніж ви помітите скорочення часу виконання команд. Це нормально.
GIT
Частина набору git[1]