Как в Git убрать файл из подготовки в коммиту?

Принято считать, что файл в репозитории, находящемся под версионным контролем 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 файлах.

Допустим, что в следующий коммит мы решили добавить все 3 файла с расширением php, и вначале мы добавляем файлы для фиксации в коммит, командой:

[cce lang=’bash’]
$ git add *.php
[/cce]

Теперь если мы посмотрим статус файлов в репозитории, то увидим, что эти 3 файла теперь в состоянии staged и готовы к фиксации в коммит.

Файлы в состоянии staged.

По каким-то причинам, мы посчитали, что один файл third.php рано включать в следующий коммит, например не подходит под общую логику коммита, и будет включен в более поздний. Тогда воспользуемся коммандой, которая сбросит статус файла на изначальное:

[cce lang=’bash’]
$ git reset HEAD third.php
[/cce]

Результат работы команды git reset HEAD.

Теперь если сделать коммит изменений, то в него войдут только желаемые файлы.

[cce lang=’bash’]
$ git commit -m «Текст коммита»
[/cce]

В результате манипуляций у нас должен возникнуть новый коммит, при этом нужный файл в него войти не должен. Убедимся в этом при помощи двух команд:

[cce lang=’bash’]
$ git log -2
$git status
[/cce]

В качестве резюме отметим, что если файл по ошибке переведен в статус staged, в системе контроля версий GIT очень удобно и быстро перевести в его в предыдущий статус при помощи команды git reset HEAD.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *