Вы также можете выполнить:
git commit --only <paths>
(добавьте -m <message>
при желании) или:
git commit --include <paths>
(снова добавьте -m <message>
при желании).Это - чтобы немного упростить его - приводит к добавлению указанных путей к индексу (--include
) или к временному индексу (--only
), а затем к фиксации с использованием индекса, выбранного вами с помощью --only
vs --include
.
Если вы использовали --include
, то завершенный коммит, который становится новым коммитом HEAD в текущей ветке, автоматически представляется расширенным индексом.Этот случай проще описать: он действительно работает так, как если бы вы git add
редактировали эти файлы, поскольку он переносит любые ранние git add
редактированные файлы.
Если вы использовали --only
,Завершенный коммит, который становится новым HEAD, представляет собой что-то, что не обязательно находится в индексе normal .Этот случай более сложный, поскольку индекс обычно должен представлять (и, следовательно, содержать все те же файлы, что и) коммит HEAD, пока вы не запустите git add
ing файлы для перезаписи версий индекса.Внутренние детали здесь заключаются в том, что Git копирует файлы --only
в обычный индекс после безопасной установки нового коммита.
Сохраняя упрощение (поскольку все версии действительно используют некоторые специальные временные индексные файлы), мы можем построить диаграммуэто как:
Обычная фиксация: использует индекс в качестве источника для всех зафиксированных файлов.После завершения коммита индекс остается индексом и по-прежнему содержит все файлы.
Следовательно, если вы git add fileA
, а затем git commit
, новый коммит будет иметь новый fileA
(ивсе те же файлы, что и раньше).Индекс и новый HEAD
коммит.
git commit --include <file>
: действует так же, как git add
, за которым следует git commit
.
Следовательно, если выgit add fileA
, а затем git commit --include fileB
, новый коммит имеет новый fileA
и новый fileB
(и тот же старый файл «все остальные», что и раньше).Индекс и новое совпадение HEAD
.
git commit --only <file>
: копирует фиксацию HEAD
во временный индекс, добавляет <file>
во временный индекс и запускает git commit
с использованием временного индекса.В случае успеха добавляет <file>
к индексу .
Следовательно, если вы git add fileA
, а затем git commit --only fileB
, новый коммит имеет old fileA
(из предыдущего HEAD
коммита), new fileB
(из временного индекса) и тот же старый файл «все остальные», что и раньше.Индекс после фиксации имеет новый fileA
и новый fileB
, поэтому индекс после фиксации отличается от нового коммита HEAD
тем, что он имеет другую версию fileA
.