Spec-Zone.ru › Git

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

Разрешить обновление записей индекса за пределами конуса разреженного извлечения. Обычно git add отказывается обновлять записи индекса, пути которых не входят в конус разреженного извлечения, поскольку эти файлы могут быть удалены из рабочего дерева без предупреждения. Подробнее см. в 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, где git add <pathspec>... был синонимом git add --no-all <pathspec>..., то есть игнорировал удалённые файлы.

-N
--intent-to-add

Зафиксировать только факт того, что путь будет добавлен позже. В индекс помещается запись пути без содержимого. Это полезно, помимо прочего, чтобы показывать неподготовленное содержимое таких файлов с помощью git diff и включать их в коммит с помощью git commit -a.

--refresh

Не добавлять файлы, а только обновить сведения stat() о них в индексе.

--ignore-errors

Если некоторые файлы не удалось добавить из-за ошибок при их индексировании, не прерывать операцию, а продолжить добавление остальных. Команда всё равно должна завершиться с ненулевым кодом возврата. Чтобы сделать это поведением по умолчанию, переменной конфигурации add.ignoreErrors можно присвоить значение true.

--ignore-missing

Этот параметр можно использовать только вместе с --dry-run. С его помощью можно проверить, будут ли проигнорированы какие-либо из указанных файлов, независимо от того, присутствуют ли они уже в рабочем дереве.

--no-warn-embedded-repo

По умолчанию git add предупреждает при добавлении встроенного репозитория в индекс без использования git submodule add для создания записи в .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 и индексом (то есть то, что будет включено в коммит при вводе git commit), а также между индексом и файлами рабочего дерева (то есть то, что ещё можно подготовить перед выполнением git commit с помощью git add). Пример вывода:

              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 (устарело)

Указывает команде git add продолжать добавлять файлы, если некоторые из них не удаётся добавить из-за ошибок индексирования. Эквивалент параметра --ignore-errors. Параметр add.ignore-errors считается устаревшим, поскольку не соответствует обычному соглашению об именовании переменных конфигурации.

См. также

git-status[1] git-rm[1] git-reset[1] git-mv[1] git-commit[1] git-update-index[1]

добавление

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-add

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API