Принято считать, что файл в репозитории, находящемся под версионным контролем SCV GIT, может находится в одном из 4 состояний:
- Неотслеживаемый Untracked
- Отслеживаемый неизмененный Tracked unmodified
- Отслеживаемый с изменениями Tracked modified
- Отслеживаемый подготовленный для фиксации в коммит Tracked staged
Файл со статусом staged — это файл который находится под версионным контролем, в который были внесены изменения, и эти изменения в файле были подготовлены для фиксации в следующем коммите командой git add .
Следующим логическим шагом является фиксация таких файлов staged в коммит с помощью команды [cci]$ git commit -m «Комментарий к коммиту»[/cci], но что если Вы захотите один из файлов пока что не включать в следующий коммит?
Для этого нужно перевести файл из состояния tracked staged в состояние tracked modified. Это значит, что git продолжает осуществлять контроль над всеми сделанными в этом файле изменениями, просто файл не будет добавлен в следующий коммит.
Делается это очень просто при помощи команды:
[cce lang=’bash’]
$ git reset HEAD имя_файла
[/cce]
Рассмотрим все вышесказанное на наглядном примере. У нас есть каталог с тремя измененными файлами, если выполним команду [cci]$ git status[/cci], то узнаем состояние репозитория.
Допустим, что в следующий коммит мы решили добавить все 3 файла с расширением php, и вначале мы добавляем файлы для фиксации в коммит, командой:
[cce lang=’bash’]
$ git add *.php
[/cce]
Теперь если мы посмотрим статус файлов в репозитории, то увидим, что эти 3 файла теперь в состоянии staged и готовы к фиксации в коммит.
По каким-то причинам, мы посчитали, что один файл third.php рано включать в следующий коммит, например не подходит под общую логику коммита, и будет включен в более поздний. Тогда воспользуемся коммандой, которая сбросит статус файла на изначальное:
[cce lang=’bash’]
$ git reset HEAD third.php
[/cce]
Теперь если сделать коммит изменений, то в него войдут только желаемые файлы.
[cce lang=’bash’]
$ git commit -m «Текст коммита»
[/cce]
В результате манипуляций у нас должен возникнуть новый коммит, при этом нужный файл в него войти не должен. Убедимся в этом при помощи двух команд:
[cce lang=’bash’]
$ git log -2
$git status
[/cce]
В качестве резюме отметим, что если файл по ошибке переведен в статус staged, в системе контроля версий GIT очень удобно и быстро перевести в его в предыдущий статус при помощи команды git reset HEAD.