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.48.1 no changes
- 2.48.0 01/10/25
- 2.46.1 → 2.47.2 no changes
- 2.46.0 no changes
- 2.45.1 → 2.45.3 no changes
- 2.45.0 04/29/24
- 2.43.2 → 2.44.3 no changes
- 2.43.1 02/09/24
- 2.40.1 → 2.43.0 no changes
- 2.40.0 03/12/23
- 2.38.1 → 2.39.5 no changes
- 2.38.0 10/02/22
- 2.37.4 → 2.37.7 no changes
- 2.37.3 08/30/22
- 2.34.1 → 2.37.2 no changes
- 2.34.0 11/15/21
- 2.25.1 → 2.33.8 no changes
- 2.25.0 01/13/20
- 2.22.1 → 2.24.4 no changes
- 2.22.0 no changes
- 2.21.1 → 2.21.4 no changes
- 2.21.0 02/24/19
- 2.18.1 → 2.20.5 no changes
- 2.18.0 06/21/18
- 2.17.0 → 2.17.6 no changes
- 2.16.6 12/06/19
- 2.15.4 no changes
- 2.14.6 12/06/19
- 2.11.4 → 2.13.7 no changes
- 2.10.5 09/22/17
- 2.8.6 → 2.9.5 no changes
- 2.7.6 07/30/17
- 2.5.6 → 2.6.7 no changes
- 2.4.12 05/05/17
- 2.3.10 09/28/15
- 2.1.4 → 2.2.3 no changes
- 2.0.5 12/17/14
ОБЗОР
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 See original version for this content. |
GIT
Является частью пакета git[1]