git-add
Название
git-add — добавление содержимого файлов в индекс
Краткое описание
git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
[--edit | -e] [--[no-]all | -A | --[no-]ignore-removal | [--update | -u]] [--sparse]
[--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--renormalize]
[--chmod=(+|-)x] [--pathspec-from-file=<file> [--pathspec-file-nul]]
[--] [<pathspec>…] Описание
Добавляет содержимое новых или изменённых файлов в индекс. «Индекс» (также известный как «область подготовки») используется для подготовки содержимого следующего коммита.
Если выполнить git commit без других аргументов, будут включены только подготовленные изменения. Например, если вы отредактировали file.c и хотите включить изменения этого файла в коммит, выполните:
git add file.c git commit
Можно также добавить в индекс только часть изменений файла с помощью git add -p.
Эту команду можно выполнять несколько раз до создания коммита. Она добавляет в индекс только содержимое указанных файлов на момент выполнения команды add. Если вы хотите включить последующие изменения в следующий коммит, нужно снова выполнить git add, чтобы добавить новое содержимое в индекс.
Команда git status позволяет получить сводку о файлах, изменения которых подготовлены для следующего коммита.
По умолчанию команда git add не добавляет игнорируемые файлы. Для добавления игнорируемых файлов можно использовать параметр --force. Если указать точное имя игнорируемого файла, команда git add завершится с ошибкой и выведет список игнорируемых файлов. В противном случае файл будет молча проигнорирован.
Другие способы добавления содержимого в коммит см. в git-commit[1].
Параметры
- <pathspec>...
-
Файлы, содержимое которых нужно добавить. Для добавления всех подходящих файлов можно использовать шаблоны файлов (например,
*.c). Также можно указать имя каталога в начале (например,dir, чтобы добавитьdir/file1иdir/file2), чтобы обновить индекс в соответствии с текущим состоянием каталога целиком (например, указаниеdirзафиксирует не только изменённый в рабочем дереве файлdir/file1и добавленный в рабочее дерево файлdir/file2, но и удалённый из рабочего дерева файлdir/file3). Обратите внимание, что в старых версиях Git удалённые файлы игнорировались; используйте параметр--no-all, если хотите добавить изменённые или новые файлы, но игнорировать удалённые.Подробнее о синтаксисе
<pathspec>см. в разделеpathspecсправочника gitglossary[7]. -
-n -
--dry-run -
Не добавлять файлы, а только показывать, существуют ли они и/или будут ли проигнорированы.
-
-v -
--verbose -
Выводить подробную информацию.
-
-f -
--force -
Разрешить добавление файлов, которые в противном случае были бы проигнорированы. Этот параметр также используется, если задано
submodule.<name>.ignore=all, но вы хотите подготовить обновление подмодуля. Изменениеpathподмодуля необходимо указать явно. -
--sparse -
Разрешить обновление записей индекса за пределами конуса разреженного извлечения. Обычно
gitaddотказывается обновлять записи индекса, пути которых не входят в конус разреженного извлечения, поскольку эти файлы могут быть удалены из рабочего дерева без предупреждения. Подробнее см. в git-sparse-checkout[1]. -
-i -
--interactive -
В интерактивном режиме добавлять изменённое содержимое рабочего дерева в индекс. Чтобы ограничить операцию частью рабочего дерева, можно указать необязательные аргументы-пути. Подробнее см. в разделе «Интерактивный режим».
-
-p -
--patch -
В интерактивном режиме выбирать фрагменты исправления между индексом и рабочим деревом и добавлять их в индекс. Это позволяет просмотреть различия перед добавлением изменённого содержимого в индекс.
Фактически выполняется
add--interactive, но пропускается начальное меню команд и сразу запускается подкомандаpatch. Подробнее см. в разделе «Интерактивный режим». -
-U<n> -
--unified=<n> -
Создавать различия с
<n>строками контекста. По умолчанию количество строк контекста равноdiff.contextили 3, если переменная конфигурации не задана. (Из-за исторической особенности-Uбез <n> молча принимается как синоним-p.) -
--inter-hunk-context=<n> -
Показывать контекст между фрагментами различий, не превышающий указанное
<number>строк, объединяя близко расположенные фрагменты. По умолчанию значение равноdiff.interHunkContextили 0, если параметр конфигурации не задан. -
-e -
--edit -
Открыть различия с индексом в редакторе и разрешить пользователю изменить их. После закрытия редактора скорректировать заголовки фрагментов и применить исправление к индексу.
Этот параметр предназначен для выбора строк исправления, которые нужно применить, или даже для изменения содержимого подготавливаемых строк. Это может быть быстрее и гибче, чем интерактивный выбор фрагментов. Однако легко запутаться и создать исправление, которое нельзя применить к индексу. См. раздел «РЕДАКТИРОВАНИЕ ИСПРАВЛЕНИЙ» ниже.
-
-u -
--update -
Обновлять индекс только там, где уже есть запись, соответствующая
<pathspec>. Удалять и изменять записи индекса в соответствии с рабочим деревом, но не добавлять новые файлы.Если при использовании параметра
-uне задан<pathspec>, обновляются все отслеживаемые файлы во всём рабочем дереве (в старых версиях Git обновление ограничивалось текущим каталогом и его подкаталогами). -
-A -
--all -
--no-ignore-removal -
Обновлять индекс не только там, где в рабочем дереве есть файл, соответствующий
<pathspec>, но и там, где в индексе уже имеется запись. Добавлять, изменять и удалять записи индекса в соответствии с рабочим деревом.Если при использовании параметра
-Aне задан<pathspec>, обновляются все файлы во всём рабочем дереве (в старых версиях Git обновление ограничивалось текущим каталогом и его подкаталогами). -
--no-all -
--ignore-removal -
Обновлять индекс, добавляя новые файлы, отсутствующие в индексе, и файлы, изменённые в рабочем дереве, но игнорировать файлы, удалённые из рабочего дерева. Если
<pathspec>не указан, этот параметр ничего не делает.Этот параметр предназначен главным образом для пользователей, привыкших к старым версиям Git, где
gitadd<pathspec>... был синонимомgitadd--no-all<pathspec>..., то есть игнорировал удалённые файлы. -
-N -
--intent-to-add -
Зафиксировать только факт того, что путь будет добавлен позже. В индекс помещается запись пути без содержимого. Это полезно, помимо прочего, чтобы показывать неподготовленное содержимое таких файлов с помощью
gitdiffи включать их в коммит с помощьюgitcommit-a. -
--refresh -
Не добавлять файлы, а только обновить сведения stat() о них в индексе.
-
--ignore-errors -
Если некоторые файлы не удалось добавить из-за ошибок при их индексировании, не прерывать операцию, а продолжить добавление остальных. Команда всё равно должна завершиться с ненулевым кодом возврата. Чтобы сделать это поведением по умолчанию, переменной конфигурации
add.ignoreErrorsможно присвоить значение true. -
--ignore-missing -
Этот параметр можно использовать только вместе с
--dry-run. С его помощью можно проверить, будут ли проигнорированы какие-либо из указанных файлов, независимо от того, присутствуют ли они уже в рабочем дереве. -
--no-warn-embedded-repo -
По умолчанию
gitaddпредупреждает при добавлении встроенного репозитория в индекс без использованияgitsubmoduleaddдля создания записи в.gitmodules. Этот параметр отключает предупреждение (например, если вы вручную выполняете операции с подмодулями). -
--renormalize -
Заново применить процесс «clean» ко всем отслеживаемым файлам, чтобы принудительно добавить их в индекс. Это полезно после изменения конфигурации
core.autocrlfили атрибутаtext, чтобы исправить файлы, добавленные с неправильными окончаниями строкCRLF/LF. Этот параметр подразумевает-u. Одиночные символы CR не изменяются: поэтому, хотяCRLFпреобразуется вLF, последовательностьCRCRLFочищается лишь частично — доCRLF. -
--chmod=(+|-)x -
Переопределить бит исполнения у добавляемых файлов. Бит исполнения изменяется только в индексе; файлы на диске остаются без изменений.
-
--pathspec-from-file=<file> -
Передавать pathspec в
<file>вместо аргументов командной строки. Если<file>— это в точности-, используется стандартный ввод. Элементы pathspec разделяются символамиLFилиCR/LF. Элементы pathspec можно заключать в кавычки, как описано для переменной конфигурацииcore.quotePath(см. git-config[1]). См. также--pathspec-file-nulи глобальный параметр--literal-pathspecs. -
--pathspec-file-nul -
Имеет смысл только вместе с
--pathspec-from-file. Элементы pathspec разделяются символомNUL, а все остальные символы воспринимаются буквально (включая символы новой строки и кавычки). -
-- -
Этот параметр можно использовать, чтобы отделить параметры командной строки от списка файлов (полезно, если имена файлов могут быть ошибочно приняты за параметры командной строки).
Примеры
-
Добавляет содержимое всех файлов
*.txtв каталогеDocumentationи его подкаталогах:$ git add Documentation/\*.txt
Обратите внимание, что в этом примере звёздочка
*заключена в кавычки, чтобы оболочка не обработала её; благодаря этому команда включает файлы из подкаталоговDocumentation/. -
Пытается добавить содержимое всех скриптов
git-*.sh:$ git add git-*.sh
Поскольку в этом примере оболочка обрабатывает звёздочку (то есть имена файлов перечисляются явно), файл
subdir/git-foo.shне учитывается.
Интерактивный режим
При переходе команды в интерактивный режим она выводит результат подкоманды status, а затем запускает интерактивный цикл команд.
Цикл команд выводит список доступных подкоманд и приглашение «What now> ». Обычно, если приглашение заканчивается одним символом >, можно выбрать только один из предложенных вариантов и нажать клавишу ввода, например:
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 1 Также можно было бы ввести s, sta или status, если выбор при этом остаётся однозначным.
В основном цикле команд доступны 6 подкоманд (а также справка и выход).
- status
-
Для каждого пути показывает изменения между
HEADи индексом (то есть то, что будет включено в коммит при вводеgitcommit), а также между индексом и файлами рабочего дерева (то есть то, что ещё можно подготовить перед выполнениемgitcommitс помощьюgitadd). Пример вывода:staged unstaged path 1: binary nothing foo.png 2: +403/-35 +1/-1 add-interactive.cВывод показывает, что файл
foo.pngотличается отHEAD(но это двоичный файл, поэтому количество строк показать нельзя), а между копией в индексе и версией в рабочем дереве различий нет (если бы версия в рабочем дереве также отличалась, вместоnothingотображалось быbinary). В другом файле,add-interactive.c, 403 строки добавлены и 35 удалены в версии из индекса, которая будет включена в коммит, но в файле рабочего дерева есть дополнительные изменения (одна строка добавлена и одна удалена). - update
-
Показывает сведения о состоянии и приглашение «Update>>». Если приглашение заканчивается двумя символами
>>, можно выбрать несколько пунктов, разделив их пробелом или запятой. Также можно указать диапазоны. Например, «2-5 7,9» выберет из списка пункты 2, 3, 4, 5, 7 и 9. Если второе число диапазона не указано, выбираются все оставшиеся исправления. Например, «7-» выберет из списка пункты 7, 8 и 9. Введите*, чтобы выбрать всё.Выбранные пункты будут выделены
*, например:staged unstaged path 1: binary nothing foo.png * 2: +403/-35 +1/-1 add-interactive.c
Чтобы отменить выбор, поставьте в начале ввода
-, например:Update>> -2
После выбора нажмите клавишу ввода на пустой строке, чтобы подготовить в индексе содержимое файлов рабочего дерева для выбранных путей.
- revert
-
Интерфейс этой подкоманды очень похож на интерфейс
update, а подготовленные изменения для выбранных путей отменяются до состояния версии HEAD. Отмена для новых путей делает их неотслеживаемыми. - add untracked
-
Интерфейс этой подкоманды очень похож на интерфейсы
updateиrevert; она позволяет добавлять неотслеживаемые пути в индекс. - patch
-
Позволяет выбрать один путь из списка вида
status. После выбора пути показываются различия между индексом и файлом рабочего дерева, и для каждого фрагмента предлагается решить, нужно ли подготовить изменение. Можно выбрать один из следующих вариантов и нажать клавишу ввода:y - stage this hunk n - do not stage this hunk q - quit; do not stage this hunk or any of the remaining ones a - stage this hunk and all later hunks in the file d - do not stage this hunk or any of the later hunks in the file g - select a hunk to go to / - search for a hunk matching the given regex j - go to the next undecided hunk, roll over at the bottom J - go to the next hunk, roll over at the bottom k - go to the previous undecided hunk, roll over at the top K - go to the previous hunk, roll over at the top s - split the current hunk into smaller hunks e - manually edit the current hunk p - print the current hunk P - print the current hunk using the pager ? - print help
После выбора действия для всех фрагментов, если был выбран хотя бы один фрагмент, индекс обновляется с учётом выбранных фрагментов.
Чтобы не нажимать клавишу ввода в этом месте, можно присвоить переменной конфигурации
interactive.singleKeyзначениеtrue. - diff
-
Позволяет просмотреть то, что будет включено в коммит (то есть различия между
HEADи индексом).
Редактирование исправлений
Вызов git add -e или выбор пункта e в интерактивном выборе фрагментов откроет исправление в редакторе; после закрытия редактора результат будет применён к индексу. Исправление можно изменять произвольным образом, однако некоторые изменения могут привести к неожиданным результатам или даже сделать его неприменимым. Чтобы полностью отменить операцию (то есть ничего нового не подготовить в индексе), просто удалите все строки исправления. Ниже описаны некоторые распространённые элементы исправления и допустимые действия с ними.
- добавленное содержимое
-
Добавленное содержимое представлено строками, начинающимися с «+». Чтобы не подготавливать добавленные строки, удалите их.
- удалённое содержимое
-
Удалённое содержимое представлено строками, начинающимися с «-». Чтобы не подготавливать удаление, замените «-» на « » (пробел).
- изменённое содержимое
-
Изменённое содержимое представлено строками «-» (удаление старого содержимого), за которыми следуют строки «+» (добавление заменяющего содержимого). Чтобы не подготавливать изменение, замените строки «-» на « » и удалите строки «+». Будьте осторожны: изменение только одной части пары может привести к непредсказуемым изменениям в индексе.
Можно выполнять и более сложные операции. Но помните: поскольку исправление применяется только к индексу, а не к рабочему дереву, рабочее дерево будет выглядеть так, будто изменение в индексе «отменено». Например, добавление в индекс новой строки, которой нет ни в HEAD, ни в рабочем дереве, подготовит эту строку для коммита, но в рабочем дереве она будет выглядеть отменённой.
Избегайте таких действий или выполняйте их с особой осторожностью.
- удаление неизменённого содержимого
-
Содержимое, не различающееся между индексом и рабочим деревом, может отображаться в строках контекста, начинающихся с « » (пробела). Чтобы подготовить строки контекста к удалению, замените пробел на «-». В результате файл рабочего дерева будет выглядеть так, будто содержимое добавлено заново.
- изменение существующего содержимого
-
Строки контекста также можно изменить: подготовить их к удалению (заменив « » на «-») и добавить строку «+» с новым содержимым. Аналогичным образом можно изменить строки «+» для уже добавленного или изменённого содержимого. Во всех случаях новое изменение будет выглядеть отменённым в рабочем дереве.
- новое содержимое
-
Можно также добавить новое содержимое, которого нет в исправлении: просто добавьте новые строки, каждая из которых начинается с «+». В рабочем дереве добавление будет выглядеть отменённым.
Есть также несколько действий, которых следует полностью избегать, поскольку они сделают исправление неприменимым:
-
добавление строк контекста (« ») или удаления («-»)
-
удаление строк контекста или удаления
-
изменение содержимого строк контекста или удаления
Конфигурация
Всё содержимое этого раздела ниже данной строки выборочно включено из документации git-config[1]. Оно совпадает с содержимым соответствующего раздела:
-
add.ignoreErrors -
add.ignore-errors(устарело) -
Указывает команде
gitaddпродолжать добавлять файлы, если некоторые из них не удаётся добавить из-за ошибок индексирования. Эквивалент параметра--ignore-errors. Параметрadd.ignore-errorsсчитается устаревшим, поскольку не соответствует обычному соглашению об именовании переменных конфигурации.
См. также
добавление
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-add