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

Источник