Интерактивное Добавление это весьма удобный способ работы с визуализацией индекса Git. Чтобы запустить его, просто напечатайте 'git add -i'. Git автоматически покажет вам ваши измененные файлы и их статус.
$>git add -i
staged unstaged path
1: unchanged +4/-0 assets/stylesheets/style.css
2: unchanged +23/-11 layout/book_index_template.html
3: unchanged +7/-7 layout/chapter_template.html
4: unchanged +3/-3 script/pdf.rb
5: unchanged +121/-0 text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
В этом случае, мы можем видеть: что у нас есть 5 измененных файлов которые еще не добавлены в индекс (т.е. их статус unstaged), и даже как много строк было добавлено или удалено в каждый файл. Затем покажется интерактивное меню описывающее что мы можем сделать в этом режиме.
Если мы хотим добавить эти файлы в индекс, мы можем напечатать '2' или 'u' что бы перейти в режим обновления. Затем Я могу определить какие файлы поместить в индекс (добавить в индекс) напечатав цифру по числу файлов (в нашем случае, 1-4)
What now> 2
staged unstaged path
1: unchanged +4/-0 assets/stylesheets/style.css
2: unchanged +23/-11 layout/book_index_template.html
3: unchanged +7/-7 layout/chapter_template.html
4: unchanged +3/-3 script/pdf.rb
5: unchanged +121/-0 text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
Update>> 1-4
staged unstaged path
* 1: unchanged +4/-0 assets/stylesheets/style.css
* 2: unchanged +23/-11 layout/book_index_template.html
* 3: unchanged +7/-7 layout/chapter_template.html
* 4: unchanged +3/-3 script/pdf.rb
5: unchanged +121/-0 text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
Update>>
Если Я нажму клавишу enter, Я попаду назад в главное меню где Я могу увидеть что статус файла изменился:
What now> status
staged unstaged path
1: +4/-0 nothing assets/stylesheets/style.css
2: +23/-11 nothing layout/book_index_template.html
3: +7/-7 nothing layout/chapter_template.html
4: +3/-3 nothing script/pdf.rb
5: unchanged +121/-0 text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
Теперь мы можем видеть что первые четыре файла проиндексированы а последний все еще нет. Это по сути краткий способ увидеть ту же информацию которую можно получить выполнив 'git status':
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: assets/stylesheets/style.css
# modified: layout/book_index_template.html
# modified: layout/chapter_template.html
# modified: script/pdf.rb
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
#
Есть несколько полезных вещей которые мы можем сделать, включая удаление файлов из индекса (3: reverse - откат), добавление неослеживаемых файлов (4:add untracked - добавление неослеживаемых), и просмотр изменений (6: diff - изменения). Эти значения прямо соотвутствуют тому что они делают. Как бы там ни было есть одна замечательная команда, которая производит индексирует патчи (5: patch).
Если вы нажмете '5' или 'p' в меню, git покажет вам ваши diff(изменения) патч за патчем и спросит если вы желаете проиндексировать каждый патч. Этим способом вы можете фактически проидексировать для коммита часть отредактированного файла. Если вы отредакталировали файл и хотите выполнить коммит только той части что изменили пропустив неизмененную часть, или выполнить коммит документации или отделить значительные изменения от просто добавленных или удаленных пробелов, вы можете выполнять 'git add -i' чтобы легко проделать это.
Здесь Я проиндексировал некоторые изменения в файле book_index_template.html, но не все:
staged unstaged path
1: +4/-0 nothing assets/stylesheets/style.css
2: +20/-7 +3/-4 layout/book_index_template.html
3: +7/-7 nothing layout/chapter_template.html
4: +3/-3 nothing script/pdf.rb
5: unchanged +121/-0 text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
6: unchanged +85/-0 text/15_Interactive_Adding/0_ Interactive_Adding.markdown
Когда вы окончили фиксацию изменений в индексе используя 'git add -i', просто завершите работу нажав (7: quit - выход) и затем выполните 'git commit' чтобы закоммитить индексированные изменения. Запомните не запускать 'git commit -a', так это сотрет все сделанные вами аккуратные изменения которые вы только что проделали и просто закоммитит все сразу.