Git Commit

Эта статья — шпаргалка по команде commit и сопутствующим ей командам: add, rm, reset. Здесь рассказывается, как отправить файлы в локальный репозиторий (commit), как подготовить их к отправке (add), как отменить последний снимок (с помощью команды reset) и как удалить отдельные файлы из индекса или даже из снимка.

Команда git add

Команда commit отправляет файлы в локальный репозиторий.

Однако перед выполнением команды commit надо подготовить файлы — составить список тех из них, которые будут отправлены в репозиторий. Команда git add позволяет это сделать — добавляет файлы и папки в индекс (область staging area). В GIT есть понятие staged files — это файлы, которые попадут в следующий снимок при выполнении команды commit.

Дело в том, что в параметрах commit не указывается, какие файлы включать в снимок. Это делается заранее в команде add, а в команде commit пишется просто комментарий и в репозиторий отправляются все подготовленные файлы из индекса (staging area).

Можно добавлять в индекс как файлы, так и папки. Например, эта команда подготовит для будущего снимка папку <имя_папки1> и файл <имя_файла1>:

git add <имя_файла1> <имя_папки1>

При этом все остальные файлы, даже если они отслеживаются в репозитории (tracked files) и были отредактированы (edited files), в следующий снимок не попадут.

Есть удобные вариации команды add:

git add -A добавляет все файлы (вновь созданные, измененные и удаленные)
git add . добавляет вновь созданные и измененные файлы, но не удаленные
git add -u добавляет измененные и удаленные, но не вновь созданные

Нетрудно заметить, что команда:

git add -A

эквивалентна двум поочередно выполненным командам:

git add .
git add -u

Удаление файлов из репозитория и с диска

Возможно, вам покажется странной фраза «добавляет удаленные файлы». На самом деле это нормально: чтобы удалить файл из локального репозитория, недостаточно просто удалить его с диска. Надо после этого еще выполнить определенную команду git.

Если речь идет об отдельном файле, то команда:

git rm <имя_файла>

добавляет файл <имя_файла> в индекс как удаленный. При этом файл удаляется и с диска, если еще не был удален оттуда.

А команда:

git add -u

позволяет выполнить git rm для всех удаленных с диска файлов одновременно, то есть отправить их в индекс.

Удаление файлов только из репозитория

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

А на диске они должны оставаться. Чтобы добавить этот лог в индекс как удаленный, но оставить его при этом на диске, выполним команду:

git rm --cached mylogfile.log

То же самое для папки делается так:

git rm --cached -r mydirectory

Что войдет в следующий снимок

Чтобы посмотреть, что же вы итоге подготовили для снимка, выполните команду:

$ git diff --name-only --cached

Благодаря параметру —name-only выведутся только названия файлов.

Команда git commit

А дальше просто — отправьте в локальный репозиторий все находящиеся в индексе файлы, комментарий обязателен:

$ git commit -m "комментарий"

Эта команда создает новый snapshot — снимок репозитория. К этому снимку можно будет вернуться в будущем. Ваши данные и комментарий будут также доступны при просмотре истории.

add и commit одной строкой

Бывает удобным отправлять файлы в репозиторий побыстрее, не выполняя по очереди add и commit. Можно выполнить эти команды и вместе:

git commit -a -m "комментарий"

Вышеприведенная команда — это то же самое, что выполненные по очереди команды:

git add .
git commit -m "комментарий"

Кратко это звучит как «добавь в индекс все измененные файлы и сделай снимок с указанным комментарием».

Обратите внимание, что удаленные файлы затронуты не будут.

Но можно создать в конфигурации любую команду из комбинации add и commit (правда, это редко используется):

git config --global alias.add-commit '!git add -A && git commit'

Мы создали команду add-commit. И с помощью нее можем выполнять действия:

git add-commit -m 'комментарий'

Как отменить последний commit

Чтобы отменить последний локальный commit, выполните команду:

git reset HEAD~1

HEAD~1 указывает на предыдущую ревизию, так что команда вернет репозиторий к предыдущему состоянию.

Как отменить git add

Чтобы удалить все файлы из staging area, выполните команду:

git reset

Чтобы удалить конкретный файл, выполните команду:

git reset <имя_файла>

Как удалить некоторые файлы из снимка

Специальной команды тут нет. Для этого надо отменить последнюю команду commit. Эта команда сдвигает указатель на предыдущее состояние:

git reset HEAD~1

В индексе останутся файлы. Надо удалить из индекса нежелательный файл:

git reset path/to/unwanted_file

Подробнее о команде reset читайте здесь.

И затем снова отправить файлы в репозиторий. Следующая команда позволит задействовать при отправке метаданные предыдущего коммита, в том числе предыдущий комментарий:

git commit -c ORIG_HEAD

ORIG_HEAD — ссылка на предыдущий снимок.

Как исправить комментарий снимка

Допустим, мы уже отправили изменения в локальный репозиторий, но надо исправить комментарий, так как в него закралась ошибка. Делаем так:

git commit --amend -m 'новый комментарий'

 

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

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