Русский ▾ Topics ▾ Latest version ▾ git-add last updated in 2.52.0

НАЗВАНИЕ

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=<файл> [--pathspec-file-nul]]
	[--] [<спецификатор-пути>…​]

ОПИСАНИЕ

Добавляет содержимое новых или изменённых файлов в индекс. "Индекс" (также известный как "область подготовки") используется для подготовки содержимого следующего коммита.

Когда вы запускаете git commit без каких-либо других аргументов, он закоммитит только подготовленные изменения. Например, если вы отредактировали file.c и хотите закоммитить свои изменения в этот файл, вы можете выполнить:

git add file.c
git commit

Вы также можете добавить только часть ваших изменений в файл с помощью git add -p.

Эту команду можно выполнить несколько раз перед коммитом. Непосредственно во время выполнения эта команды только добавляет содержимое указанного файла(ов); если вы хотите, чтобы изменения, сделанные после запуска оной, были включены в следующий коммит, вы должны запустить git add ещё раз, чтобы добавить новое содержимое в индекс.

Команда git status может быть использована для получения информации о том, какие файлы содержат изменения, подготовленные для следующего коммита.

Команда git add по умолчанию не добавляет игнорируемые файлы. Вы можете использовать параметр --force для добавления игнорируемых файлов. Если вы укажете точное имя игнорируемого файла, git add завершится ошибкой со списком игнорируемых файлов. В противном случае он будет молча игнорировать файл.

По ссылке git-commit[1] доступны альтернативные пути добавления файлов в коммит.

ПАРАМЕТРЫ

<спецификатор-пути>…

Файлы для добавления. Маска (например, *.c) может быть указана для добавления всех файлов. Кроме того, вы можете указать родительский каталог (например, dir чтобы добавить dir/file1 и dir/file2) для отслеживания каталога целиком (например, указав dir будет добавлен не только файл dir/file1, но и файл dir/file3, который был удалён из рабочего каталога). Заметим, что в более ранних версиях Git игнорировал удалённые файлы; используйте параметр --no-all если вы хотите добавить изменённые или созданные файлы, но игнорировать удалённые.

Более детально синтаксис <спецификатора-пути> рассматривается в разделе «спецификатор пути (pathspec)» в gitglossary[7].

-n
--dry-run

Не добавлять указанные файл(ы), а просто показать, существуют ли они и/или будут ли проигнорированы.

-v
--verbose

Быть многословнее.

-f
--force

Разрешить добавление файлов, которые иначе были бы проигнорированы.

--sparse

Разрешить обновление объектов индекса за пределами извлечённой области разреженного состояния (sparse-checkout). Обычно git add отказывается обновлять данные индекса, не входящие в область, извлечённую sparse-checkout, поскольку эти файлы могут быть удалены из рабочей копии без предупреждения. См. подробности в git-sparse-checkout[1].

-i
--interactive

Добавление изменённых файлов рабочего каталога в индекс в интерактивном режиме. Для работы с отдельными подкаталогами рабочего каталога вы можете указать пути в виде дополнительных аргументом. См. подробности в разделе «Интерактивный режим».

-p
--patch

Вручную, по кусочкам отобрать из всех измерений между индексом и рабочим каталогом те, которые будут добавлены в индекс. Это даёт пользователю возможность перепроверить изменения перед добавлением изменённого содержимого в индекс.

По сути это запускает add --interactive, но пропускает начальное меню и сразу переходит к подкоманде patch. См. подробности в разделе «Интерактивный режим».

-U<n>
--unified=<n>

Создать списки изменений с <n> строками контекста. По умолчанию diff.context или 3, если переменная конфигурации не задана.

--inter-hunk-context=<n>

Выводить в качестве контекста между блоками изменений до <n> строк, тем самым объединяя близкие блоки изменений. По умолчанию равно значению переменной конфигурации diff.interHunkContext или 0, если она не установлена.

-e
--edit

Открыть отличия от индекса в редакторе в виде патча и дать пользователю возможность отредактировать его. После закрытия редактора, подправить заголовки блоков изменений и применить этот патч к индексу.

Назначение этого параметра состоит в том, чтобы отобрать для применения и добавления в индекс только некоторых строк патча или даже изменения их содержимого. Это может быть более быстрый и гибкий подход, чем использование интерактивный выбор блоков кода. Однако при таком подходе довольно легко запутаться и создать патч, который не получится применить к индексу. См. раздел «РЕДАКТИРОВАНИЕ ПАТЧЕЙ» далее.

-u
--update

Обновить индекс только для тех <спецификаторов-пути>, которые уже содержатся в нём. Это удаляет, а также изменяет записи индекса так, чтобы он соответствовал рабочему каталогу, но не добавляет в него никаких новых файлов.

Если совместно с параметром -u не задан ни один <спецификатор-пути>, обновляются все отслеженные файлы во всём рабочем каталоге (более старые версии Git ограничивались обновлением только текущего рабочего каталога и его подкаталогов).

-A
--all
--no-ignore-removal

Обновить индекс не только для тех файлов в рабочем каталоге, для которых заданы <спецификаторы-путей>, но и для всех файлов, которые уже содержатся в индексе. Это удаляет, изменяет и добавляет записи в индекс так, чтобы он соответствовал рабочей копии.

Если совместно с параметром -A не задан ни один <спецификатор-пути>, обновляются все файлы во всём рабочем каталоге (более старые версии Git ограничивались обновлением только текущего рабочего каталога и его подкаталогов).

--no-all
--ignore-removal

Обновить индекс добавив новые файлы, которые пока неизвестны индексу, и файлы, изменённые в рабочей копии, но игнорируйте файлы, которые были удалены из рабочего каталога. Если совместно с данным параметром не задан ни один <спецификатор-пути>, то не будет произведено ни каких действий.

Этот параметр, в первую очередь, призван помочь тем пользователям, которые привыкли к более старым версиям Git, в которых git add <спецификатор-пути>... работал как git add --no-all <спецификатор-пути>..., т.е. игнорировал удалённые файлы.

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

--renormalize

Применить процесс «очистки» заново ко всем отслеживаемым файлам, чтобы снова принудительно добавить их в индекс. Это полезно после изменения переменной конфигурации core.autocrlf или атрибута text, дабы исправить файлы, добавленные с неправильными окончаниями строк (CRLF/LF). Этот параметр подразумевает -u. Одинокие CR-символы не будут затронуты, поэтому в то время как CRLF будут очищены до LF, последовательность CRCRLF будет только частично очищаться до CRLF.

--chmod=(+|-)x

Переопределить исполняемый бит добавленных файлов. Исполняемый бит изменяется только в индексе, файлы на диске не изменяются.

--pathspec-from-file=<файл>

Спецификатор пути передаётся в <файле>, а не в аргументах командной строки. Если в качестве <файла> указано в точности -, то используется стандартный поток ввода. Элементы спецификатора пути отделяются друг от друга символами LF или CR/LF. Элементы спецификатора пути могут указываться в кавычках, как это описано для переменной конфигурации core.quotePath (см. git-config[1]). См. также --pathspec-file-nul и глобальный параметр --literal-pathspecs.

--pathspec-file-nul

Имеет значение только при указании --pathspec-from-file. Элементы спецификатора пути отделяются друг от друга с помощью NUL-символа, а все остальные символы интерпретируются буквально (включая кавычки и переводы строк).

--

Этот параметр — разделитель, который можно использовать для отделения параметров командной строки от списка файлов (полезно, когда имена файлов могут быть ошибочно приняты за параметры командной строки).

ПРИМЕРЫ

  • Добавляет содержимое из всех файлов *.txt в каталоге Documentation и его подкаталогах:

    $ git add Documentation/\*.txt

    Обратите внимание, что в этом примере звёздочка * экранируется от обработки системной оболочкой; это позволяет команде включать файлы из подкаталогов каталога Documentation/.

  • Рассмотрим добавление содержимого всех скриптов с именем git-*.sh:

    $ git add git-*.sh

    Поскольку этот пример позволяет системной оболочке самой обработать звездочку (т.е. вы явно перечисляете файлы), он не учитывает файл subdir / git-foo.sh.

ИНТЕРАКТИВНЫЙ РЕЖИМ

Когда команда входит в интерактивный режим, она показывает вывод подкоманды status, а затем переходит в цикл интерактивных команд.

Цикл команд показывает список доступных подкоманд и приглашение "Что теперь> ". Обычно, когда приглашение заканчивается одним символом >, вы можете выбрать только один из предложенных вариантов и нажать Enter, например:

    *** Команды ***
      1: status       2: update       3: revert       4: add untracked
      5: patch        6: diff         7: quit         8: help
    Что теперь> 1

Также, вместо 1 вы можете написать s, sta, status или иначе, при этом выбор должен быть однозначен.

Основной цикл команд содержит 6 подкоманд (плюс help (помощь) и quit (выход)).

status

Эта команда показывает различия между HEAD и индексом (т.е. что будет зафиксировано при выполнении git commit) и между рабочей копией и индексом (т.е. что вы ещё можете добавить в индекс с помощью git add, прежде чем выполнить git commit) для каждого файла. Пример вывода:

              в индексе не в индексе путь
     1:        двоичный       ничего foo.png
     2:        +403/-35        +1/-1 add-interactive.c

Из этого видно, что в foo.png есть отличия от версии в HEAD (но, т.к. это двоичный файл, количество отличающихся строк не подсчитывается), а версии в рабочей копии и в индексе не отличаются (если бы версия в индексе отличалась от рабочей копии, то вместо ничего была бы надпись двоичный). Для файла add-interactive.c в индекс добавлены изменения (403 добавленных и 35 удалённых строк), но в рабочей копии есть ещё изменения этого файла (1 добавленная и 1 удалённая строка).

update

Эта команда показывает информацию о состоянии и выводит приглашение ввода "Обновить>>". Когда приглашение ввода оканчивается на >>, вы можете выбирать несколько элементов, разделяя их номера пробелом или запятой. Также можно указывать диапазоны. Например, "2-5 7,9" выберет из списка элементы 2,3,4,5,7,9. Если второе число диапазона опущено, то выбираются оставшиеся элементы до конца. Например, "7-" выберет 7,8,9. Чтобы выбрать все, можно указать *.

Всё, что вы выберете, будет помечаться знаком *, например:

           в индексе не в индексе путь
  1:        двоичный       ничего foo.png
* 2:        +403/-35        +1/-1 git-add--interactive.perl

Чтобы убрать выбор, добавьте в начало знак -, например:

Обновить>> -2

После выбора нужных файлов, ответьте на приглашение пустой строкой, чтобы содержимое файлов в рабочем каталоге было проиндексировано.

revert

Интерфейс этой команды очень похож на update; она откатывает состояние файлов в индексе к их версии в HEAD. Откат добавления новых файлов приведёт к тому, что они станут неотслеживаемыми.

add untracked

Интерфейс этой команды очень похож на update и revert; она позволяет добавлять неотслеженные пути в индекс.

patch

Эта команда позволяет выбрать один путь из перечисленных в status. После выбора пути, она выведет различия между индексом и рабочей копией и для каждого блока изменений будет спрашивать вас, хотите ли вы добавить этот блок в индекс. Вы можете выбрать один из следующих вариантов и нажать Enter:

y - индексировать этот блок
n - пропустить этот блок
q - выход; пропустить этот и все оставшиеся блоки
a - индексировать этот и остальные блоки файла
d - пропустить этот и остальные блоки файла
g - выбрать блок изменений на который нужно перейти
/ - поиск блока изменений с помощью регулярного выражения
j - перейти к следующему нерешённому блоку, с циклическим переходом внизу
J - перейти к следующему блоку, с циклическим переходом внизу
k - перейти к предыдущему нерешённому блоку, с циклическим переходом вверху
K - перейти к предыдущему блоку, с циклическим переходом вверху
s - разделить текущий блок на блоки меньшего размера
e - вручную отредактировать текущий блок
P - вывести текущий блок с помощью пейджера
? - вывести справку

После решения судьбы всех блоков изменений выбранные фрагменты добавляются в индекс.

Чтобы после ввода команды не приходилось нажимать Enter, можно установить переменную конфигурации 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 считается устаревшим (deprecated), так как он не следует устоявшимся конвенциям наименования переменных конфигурации.

GIT

Является частью пакета git[1]