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.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 -
Показати кількість записів, що наразі зберігаються в сховищі.
-
--porcelain[=<version>] -
Вивід надайте у форматі, зручному для розбору для скриптів. Це схоже на короткий вивід, але залишатиметься стабільним у різних версіях Git та незалежно від конфігурації користувача. Детальніше дивіться нижче.
Параметр <версія> використовується для визначення версії формату. Це необов’язково та за замовчуванням використовується формат оригінальної версії
v1. -
--long -
Виведіть результат у довгому форматі. Це значення за замовчуванням.
-
-v -
--verbose -
Окрім назв файлів, які було змінено, також покажіть текстові зміни, які підготовлені для фіксації (тобто, як у виводі
gitdiff--cached). Якщо-vвказано двічі, тоді також покажіть зміни в робочому дереві, які ще не були підготовлені (тобто, як у виводі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 -
ігнорувати всі зміни в робочому дереві підмодулів, відображаються лише зміни в коммітах, що зберігаються в суперпроекті (така поведінка була до версії 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 -
Відображати або не відображати детальну кількість пропущених/відсталих етапів для гілки відносно її гілки вище за течією. За замовчуванням
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>
де <шлях-початку> – це походження перейменованого/скопійованого вмісту. <шлях-початку> відображається лише тоді, коли запис перейменовано або скопійовано. <xy> – це дволітерний код стану XY.
Поля (включно з ->) розділені одне від одного одним пробілом. Якщо ім’я файлу містить пробіли або інші недруковані символи, це поле буде взято в лапки як рядковий літерал C: оточене подвійними лапками ASCII (34) та з внутрішніми спеціальними символами, екранованими зворотною скісну рискою.
Існує три різні типи станів, що відображаються за допомогою цього формату, і кожен з них використовує синтаксис <xy> по-різному:
-
Коли відбувається злиття, і воно пройшло успішно, або поза межами злиття У цій ситуації
Xпоказує стан індексу, аYпоказує стан робочого дерева. -
Коли виник конфлікт злиття, який ще не вирішено,
XтаYпоказати стан, введений кожним голівкою злиття, відносно спільного предка. Ці шляхи називаються незлитими. -
Коли шлях не відстежується,
XтаYзавжди однакові, оскільки вони невідомий індексу. ?? використовується для невідстежуваних шляхів. Ігноровані файли не відображаються, якщо не використовується--ignored; якщо використовується, ігноровані файли позначаються!!.
Зверніть увагу, що термін merge тут також включає перебазування з використанням стратегії --merge за замовчуванням, вибіркові варіанти та будь-що інше, що використовує механізм злиття.
У наступній таблиці ці три класи показано в окремих розділах, а ці символи використовуються для полів X та Y для перших двох розділів, які показують відстежувані шляхи:
| X | Y | Meaning |
|---|---|---|
[ |
not updated |
|
|
[ |
updated in index |
|
[ |
type changed in index |
|
[ |
added to index |
|
deleted from index |
|
|
[ |
renamed in index |
|
[ |
copied in index |
[ |
index and work tree matches |
|
[ |
|
work tree changed since index |
[ |
|
type changed in work tree since index |
[ |
|
deleted in work tree |
|
renamed in work tree |
|
|
copied in work tree |
|
|
|
unmerged, both deleted |
|
|
unmerged, added by us |
|
|
unmerged, deleted by them |
|
|
unmerged, added by them |
|
|
unmerged, deleted by us |
|
|
unmerged, both added |
|
|
unmerged, both modified |
? |
? |
untracked |
|
|
ignored |
Підмодулі мають більше станів і натомість звітують
Це пояснюється тим, що змінений контент або невідстежувані файли в підмодулі не можна додати через git add у суперпроекті для підготовки коміту.
m та ? застосовуються рекурсивно. Наприклад, якщо вкладений підмодуль у підмодулі містить невідстежуваний файл, це також повідомляється як ?.
If -b використовується, статусу короткого формату передує рядок
{empty}## <branchname> <tracking-info>
Формат порцеляни, версія 1
Формат porcelain версії 1 схожий на короткий формат, але гарантовано не змінюватиметься зворотно несумісним чином між версіями Git або залежно від конфігурації користувача. Це робить його ідеальним для парсингу скриптами. Опис короткого формату вище також описує формат porcelain, за кількома винятками:
-
Конфігурація
color.statusкористувача не враховується; колір завжди буде вимкнено. -
Конфігурація
status.relativePathsкористувача не враховується; показані шляхи завжди будуть відносними до кореневого каталогу репозиторію.
Також існує альтернативний формат -z, рекомендований для машинного розбору. У цьому форматі поле стану те саме, але деякі інші речі змінюються. По-перше, -> пропускається з записів перейменування, а порядок полів змінюється на протилежний (наприклад, from -> to стає to from). По-друге, після кожного імені файлу йде NUL (ASCII 0), який замінює пробіл як роздільник полів та символ нового рядка (але пробіл все ще відокремлює поле стану від першого імені файлу). По-третє, імена файлів, що містять спеціальні символи, не форматуються спеціально; лапки та екранування зворотною скісну рискою не виконуються.
Будь-які зміни підмодулів повідомляються як модифікований M замість m або одинарного ?.
Формат порцеляни, версія 2
Формат версії 2 додає детальнішу інформацію про стан робочого дерева та змінені елементи. Версія 2 також визначає розширюваний набір простих для розбору додаткових заголовків.
Заголовки починаються з символу # та додаються у відповідь на певні аргументи командного рядка. Парсери повинні ігнорувати заголовки, які вони не розпізнають.
Заголовки гілок
Якщо вказано --branch, виводиться серія рядків заголовка з інформацією про поточну гілку.
| Line | Notes |
|---|---|
|
Current commit. |
|
Current branch. |
|
If upstream is set. |
|
If upstream is set and the commit is present. |
Інформація про схованку
Якщо вказано --show-stash, виводиться один рядок, який показує кількість записів stash, якщо вони не нульові:
# запас <N>
Змінені відстежувані записи
Після заголовків друкується серія рядків для відстежуваних записів. Для опису запису може бути використаний один із трьох різних форматів рядків залежно від типу зміни. Відстежувані записи друкуються у невизначеному порядку; парсери повинні дозволяти поєднання 3 типів рядків у будь-якому порядку.
Звичайні змінені записи мають такий формат:
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, описані в короткому форматі, причому "." замість пробілу позначено як ".". |
<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> |
Вісімковий режим файлу на етапі 1. |
<m2> |
Вісімковий режим файлу на етапі 2. |
<m3> |
Вісімковий режим файлу на етапі 3. |
<mW> |
Вісімковий режим файлу в робочому дереві. |
<h1> |
Ім’я об’єкта на етапі 1. |
<h2> |
Ім’я об’єкта на етапі 2. |
<h3> |
Ім’я об’єкта на етапі 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.<назва>.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(see 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]