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 no changes
-
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 -
Показывать количество записей, в настоящее время спрятанных.
-
--porcelain[=<version>] -
Выдавать вывод в формате, удобном для анализа сценариями. Это похоже на краткий вывод, но останется стабильным во всех версиях Git и независимо от конфигурации пользователя. Подробности см. ниже.
Параметр <версия> используется для указания версии формата. Он необязателен и по умолчанию имеет исходный формат
v1. -
--long -
Выдавать вывод в длинном формате. Это значение по умолчанию.
-
-v -
--verbose -
В дополнение к именам изменённых файлов также показывать текстовые изменения, которые проиндексированы для фиксации (т.е. как вывод
gitdiff--cached). Если-vуказан дважды, также показывать изменения в рабочем каталоге, которые ещё не проиндексированы (т.е. как выводgitdiff). -
-u[<режим>] -
--untracked-files[=<режим>] -
Отображать неотслеживаемые файлы.
Параметр режима используется для указания обработки неотслеживаемых файлов. Он необязателен: по умолчанию
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>] -
Iгнорировать изменения в подмодулях при поиске изменений. <когда> может быть
none,untracked,dirtyилиall, что является значением по умолчанию.-
none -
будет считать подмодуль изменённым, когда он содержит неотслеживаемые или изменённые файлы, или его HEAD отличается от коммита, записанного в суперпроекте, и может использоваться для переопределения любых настроек параметра
ignoreв git-config[1] или gitmodules[5]. -
untracked -
подмодули не считаются изменёнными, когда они содержат только неотслеживаемое содержимое (но они всё равно сканируются на предмет изменённого содержимого).
-
dirty -
игнорировать все изменения в рабочем каталоге подмодулей, показываются только изменения в коммитах, хранящихся в суперпроекте (это было поведением до версии 1.7.0).
-
all -
скрывать все изменения в подмодулях (и подавлять вывод сводок по подмодулям, когда установлен параметр конфигурации
status.submoduleSummary).
-
-
--ignored[=<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 в gitglossary[7].
ВЫВОД
Вывод этой команды предназначен для использования в качестве комментария-шаблона коммита. Формат по умолчанию, длинный, предназначен для удобочитаемости, подробности и описательности. Его содержимое и формат могут быть изменены в любое время.
Пути, упомянутые в выводе, в отличие от многих других команд Git, являются относительными относительно текущего каталога, если вы работаете в подкаталоге (это сделано намеренно, чтобы помочь копированию и вставке). См. параметр конфигурации status.relativePaths ниже.
Короткий формат
При использовании короткого формата статус каждого пути отображается в одном из следующих форм:
<xy> <путь> <xy> <исходный-путь> -> <путь>
где <orig-path> — это место, откуда было переименовано/скопировано содержимое. <orig-path> отображается только в том случае, если запись была переименована или скопирована. <xy> — это двухбуквенный код состояния XY.
Поля (включая ->) отделяются друг от друга одним пробелом. Если имя файла содержит пробелы или другие непечатаемые символы, это поле будет заключено в кавычки в стиле строкового литерала C: окружено символами ASCII двойной кавычки (34), а внутренние специальные символы экранированы обратной косой чертой.
Существует три различных типа состояний, которые показываются с использованием этого формата, и каждый из них использует синтаксис <xy> по-разному:
-
Когда происходит слияние и оно было успешным, или вне слияния ситуации,
Xпоказывает статус индекса, аYпоказывает статус рабочего каталога. -
Когда возник конфликт слияния и он ещё не разрешён,
XиYпоказывают состояние, внесённое каждой головой слияния, относительно общего предка. Эти пути называются не слитыми. -
Когда путь не отслеживается,
XиYвсегда одинаковы, поскольку они неизвестны индексу. ?? используется для неотслеживаемых путей. Игнорируемые файлы не перечисляются, если не используется--ignored; если используется, игнорируемые файлы обозначаются!!.
Обратите внимание, что термин merge здесь также включает перемещения с использованием стратегии --merge по умолчанию, копирование коммитов и всё остальное, что использует механизм слияния.
В следующей таблице эти три класса показаны в отдельных разделах, и эти символы используются для полей X и Y в первых двух разделах, показывающих отслеживаемые пути:
| X | Y | Значение |
|---|---|---|
[ |
не обновлено |
|
|
[ |
обновлён в индексе |
|
[ |
тип изменён в индексе |
|
[ |
добавлен в индекс |
|
удалён из индекса |
|
|
[ |
переименовано в индексе |
|
[ |
скопирован в индексе |
[ |
индекс и рабочий каталог совпадают |
|
[ |
|
рабочий каталог изменён с момента индекса |
[ |
|
тип изменён в рабочем каталоге с момента индекса |
[ |
|
удалён в рабочем каталоге |
|
переименован в рабочем каталоге |
|
|
скопирован в рабочем каталоге |
|
|
|
не слит, оба удалены |
|
|
не слит, добавлено нами |
|
|
не слит, удалено ими |
|
|
не слит, добавлено ими |
|
|
не слит, удалено нами |
|
|
не слито, оба добавлены |
|
|
не слито, оба изменены |
? |
? |
неотслеживаемый |
|
|
игнорируемый |
Подмодули имеют больше состояний и вместо этого сообщают
Это связано с тем, что изменённое содержимое или неотслеживаемые файлы в подмодуле не могут быть добавлены через git add в суперпроекте для подготовки коммита.
m и ? применяются рекурсивно. Например, если вложенный подмодуль в подмодуле содержит неотслеживаемый файл, это также сообщается как ?.
Если используется -b, краткому формату статуса предшествует строка
{empty}## <имя-ветки> <информация-об-отслеживании>
Формат 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, выводится серия строк заголовков с информацией о текущей ветке.
| Строка | Заметки |
|---|---|
|
Текущий коммит. |
# branch.head <ветка> | (отсоединённый) |
Текущая ветка. |
|
Если вышестоящая ветка установлена. |
|
Если вышестоящая ветка установлена и коммит присутствует. |
Информация о спрятанных изменениях
Если указан --show-stash, выводится одна строка, показывающая количество спрятанных записей, если оно ненулевое:
# stash <N>
Изменённые отслеживаемые записи
После заголовков выводится серия строк для отслеживаемых записей. В зависимости от типа изменения для описания записи может использоваться один из трёх различных форматов строк. Отслеживаемые записи выводятся в неопределённом порядке; анализаторы должны допускать смешение 3 типов строк в любом порядке.
Обычные изменённые записи имеют следующий формат:
1 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <путь>
Переименованные или скопированные записи имеют следующий формат:
2 <XY> <sub> <mH> <mI> <mW> <hH> <hI> <X><оценка> <путь><разделитель><исходный-путь>
| Поле | Значение |
|---|---|
<XY> |
Двухсимвольное поле, содержащее проиндексированные и неиндексированные значения XY, описанные в кратком формате, с неизменёнными, обозначенными "." вместо пробела. |
<под> |
Четырёхсимвольное поле, описывающее состояние подмодуля.
"N…", когда запись не является подмодулем.
|
<mH> |
Восьмеричный режим файла в HEAD. |
<mI> |
Восьмеричный режим файла в индексе. |
<mW> |
Восьмеричный режим файла в рабочем каталоге. |
<hH> |
Имя объекта в HEAD. |
<hI> |
Имя объекта в индексе. |
<X><оценка> |
Оценка переименования или копирования (обозначающая процент сходства между источником и целью перемещения или копирования). Например, «R100» или «C75». |
<путь> |
Имя пути. В переименованной/скопированной записи это целевой путь. |
<разделитель> |
Когда используется параметр |
<исходный-путь> |
Имя пути в коммите в HEAD или в индексе. Присутствует только в переименованной/скопированной записи и указывает, откуда взялось переименованное/скопированное содержимое. |
Не слитые записи имеют следующий формат; первый символ — "u", чтобы отличить их от обычных изменённых записей.
u <XY> <sub> <m1> <m2> <m3> <mW> <h1> <h2> <h3> <путь>
| Поле | Значение |
|---|---|
<XY> |
Двухсимвольное поле, описывающее тип конфликта как описано в кратком формате. |
<под> |
Четырёхсимвольное поле, описывающее состояние подмодуля как описано выше. |
<m1> |
Восьмеричный режим файла на стадии 1. |
<m2> |
Восьмеричный режим файла на стадии 2. |
<m3> |
Восьмеричный режим файла на стадии 3. |
<mW> |
Восьмеричный режим файла в рабочем каталоге. |
<h1> |
Имя объекта на этапе 1. |
<h2> |
Имя объекта на этапе 2. |
<h3> |
Имя объекта на этапе 3. |
<путь> |
Имя пути. |
Другие элементы
После отслеживаемых записей (и если запрошено) будет выведена серия строк для неотслеживаемых, а затем игнорируемых элементов, найденных в рабочем каталоге.
Неотслеживаемые элементы имеют следующий формат:
? <путь>
Игнорируемые элементы имеют следующий формат:
! <путь>
Примечания к формату имени пути и -z
Когда указан параметр -z, имена путей выводятся как есть, без каких-либо кавычек, а строки завершаются байтом NUL (ASCII 0x00).
Без параметра -z имена путей с "необычными" символами заключаются в кавычки, как объяснено для переменной конфигурации core.quotePath (см. git-config[1]).
КОНФИГУРАЦИЯ
Команда учитывает переменные конфигурации color.status (или status.color — они означают одно и то же, и последняя сохранена для обратной совместимости) и color.status.<слот> для раскрашивания своего вывода.
Если переменная конфигурации 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 автоматически обновляет индекс, обновляя кэшированную информацию stat из рабочего каталога и записывая результат. Запись обновлённого индекса является оптимизацией, которая не является строго необходимой (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=<путь-к-команде-перехватчика> (см. git-update-index[1]): включить как кэш неотслеживаемых файлов, так и функции FSMonitor, и искать только каталоги, которые были изменены с момента предыдущей командыgitstatus. Это быстрее, чем использование только кэша неотслеживаемых файлов, потому что Git также может избежать поиска изменённых каталогов. Git должен перечислить только точный набор каталогов, которые изменились недавно. Хотя функция FSMonitor может быть включена без кэша неотслеживаемых файлов, преимущества в этом случае значительно снижаются.
Обратите внимание, что после включения кэша неотслеживаемых файлов и/или функций FSMonitor может потребоваться несколько команд git status, чтобы различные кэши прогрелись, прежде чем вы увидите улучшенное время выполнения команды. Это нормально.
GIT
Является частью пакета git[1]