intend-to-add в Git

Команда git add выполняется вслепую, но ее можно более или менее проконтролировать, используя опцию --patch. Но к сожалению, она хорошо работает только с изимененными или удаленными файлами, а вот неотслеживаемые »(англ. untracked — это файлы, отсутствующие в предыдущем коммите)» файлы отображены не будут.

$ echo "Hello, World!" > untracked
$ git status --short
?? untracked
$ git add --patch
No changes.

Это лечится опцией »’--intend-to-add»’. В соответствии с документацией, эта опция меняет поведение git add следующим образом:

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

Это означает, что после выполнения git add --intend-to-add неотслеживаемые файлы будут добавлены в индексное дерево, но без содержимого (т.е. будет указан только путь). Теперь, при запуске git add --patch будут отображаться различия во всех ранее индексированных неотслеживаемых файлах даже с перечислением измененных строк. Это позволяет вам просмотреть весь файл, строка за строкой, прежде, чем индексировать его. Вы можете даже отменить индексирование каких-либо строк, просто удалив их из патча.

$ echo "Hello, World!" > untracked
$ git status --short
?? untracked
$ git add --intent-to-add untracked
$ git status --short
AM untracked
$ git add --patch
diff --git a/untracked b/untracked
index e69de29..8ab686e 100644
--- a/untracked
+++ b/untracked
@@ -0,0 +1 @@
+Hello, World!
Stage this hunk [y,n,q,a,d,/,e,?]?

Для удобства, можно в .gitconfig обозначить add --all --intent-to-add, например, за aa и add --patch за ap. И в таком случае для большинства коммитов достаточно будет писать:

$ git aa
$ git ap

Или в gitsh:
& aa
& ap

Источник