Git
Русский ▾ Topics ▾ Latest version ▾ git-add last updated in 2.48.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]] [--] [<спецификатор-пути>…​]

ОПИСАНИЕ

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

Так называемый «индекс» содержит снимок содержимого рабочего каталога, и именно этот снимок используется в качестве содержимого последующего коммита. Таким образом, после внесения любых изменений в рабочий каталог и перед запуском команды commit вы должны добавить любые новые или изменённые файлы в индекс с помощью команды add.

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

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

Команда git add по умолчанию не добавляет игнорируемые файлы. Если какие-либо игнорируемые файлы были явно указаны в командной строке, git add завершится ошибкой со списком игнорируемых файлов. Игнорируемые файлы, найденные в результате рекурсивного обхода каталогов или подстановки шаблонов имён (globbing), которые выполняет сам Git (заключите шаблон в кавычки, чтобы он не обрабатывался оболочкой), будут проигнорированы без вывода дополнительных уведомлений. Заставить команду git add обрабатывать игнорируемые файлы можно с помощью параметра -f (force, принудительно).

По ссылке 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. См. подробности в разделе «Интерактивный режим».

-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]:

Warning

Missing ru/config/add.txt

See original version for this content.

GIT

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

scroll-to-top