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.52.0
2025-11-17
- 2.51.1 → 2.51.2 no changes
-
2.51.0
2025-08-18
- 2.48.1 → 2.50.1 no changes
-
2.48.0
2025-01-10
- 2.46.1 → 2.47.3 no changes
- 2.46.0 no changes
- 2.45.1 → 2.45.4 no changes
-
2.45.0
2024-04-29
- 2.43.2 → 2.44.4 no changes
-
2.43.1
2024-02-09
- 2.40.1 → 2.43.0 no changes
-
2.40.0
2023-03-12
- 2.38.1 → 2.39.5 no changes
-
2.38.0
2022-10-02
- 2.37.4 → 2.37.7 no changes
-
2.37.3
2022-08-30
- 2.34.1 → 2.37.2 no changes
-
2.34.0
2021-11-15
- 2.25.1 → 2.33.8 no changes
-
2.25.0
2020-01-13
- 2.22.1 → 2.24.4 no changes
- 2.22.0 no changes
- 2.21.1 → 2.21.4 no changes
-
2.21.0
2019-02-24
- 2.18.1 → 2.20.5 no changes
-
2.18.0
2018-06-21
- 2.17.0 → 2.17.6 no changes
-
2.16.6
2019-12-06
- 2.15.4 no changes
-
2.14.6
2019-12-06
- 2.11.4 → 2.13.7 no changes
-
2.10.5
2017-09-22
- 2.8.6 → 2.9.5 no changes
-
2.7.6
2017-07-30
- 2.5.6 → 2.6.7 no changes
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 no changes
-
2.0.5
2014-12-17
ОБЗОР
gitadd'[--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). Обычно
gitaddотказывается обновлять данные индекса, не входящие в область, извлечённую 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, в которых
gitadd<спецификатор-пути>... работал какgitadd--no-all<спецификатор-пути>..., т.е. игнорировал удалённые файлы. -
-N -
--intent-to-add -
Записать только тот факт, что путь будет добавлен позже. Путь будет добавлен в индекс, но не содержимое файла. Это полезно, среди прочего, для того, чтобы выводить неиндексированное содержимое таких файлов с помощью
gitdiff, а также возможности их закоммитить с помощьюgitcommit-a. -
--refresh -
Не добавлять файл(ы), а только обновить в индексе stat()-информацию о них.
-
--ignore-errors -
Если некоторые файлы не могут быть добавлены из-за ошибок при их индексации, не прерывать операцию, а продолжить добавление остальных файлов. Тем не менее, команда должна завершится с ненулевым статусом. Переменную конфигурации
add.ignoreErrorsможет быть установлена вtrue, дабы сделать это поведением по умолчанию. -
--ignore-missing -
Этот параметр может использоваться только совместно с
--dry-run. Используя этот параметр, пользователь может проверить, будет ли какой-либо из заданных файлов проигнорирован, независимо от того, присутствуют ли они уже в рабочем каталоге или нет. -
--no-warn-embedded-repo -
По-умолчанию,
gitaddпоказывает предупреждение при попытке добавить в индекс вложенный репозиторий, если данный вложенный репозитория не был ранее добавлен в.gitmodulesс помощьюgitsubmoduleadd. Этот параметр отключает данное предупреждение (например, когда вы работаете с подмодулями вручную). -
--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и индексом (т.е. что будет зафиксировано при выполненииgitcommit) и между рабочей копией и индексом (т.е. что вы ещё можете добавить в индекс с помощьюgitadd, прежде чем выполнитьgitcommit) для каждого файла. Пример вывода:в индексе не в индексе путь 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]