05. Commit

General terms

Ревизия (revision) - это любое зафиксированное изменение в системе контроля версий. Процесс создания ревизии называется коммит (commit). Снапшот (snapshot) – это сам файл после изменения.

Revision и snapshot – это не одно и тоже. Коммит порождает ревизию, но сама ревизия может содержать внутри себя либо diff изменений, либо snapshot. Стоит рассматривать коммит как событие, содержимым которого является или diff или commit.

Процесс переключения между ревизиями или загрузки конкретной ревизии называется checkout.

Staging area

The git add command adds a change in the working directory to the staging area. It tells Git that you want to include updates to a particular file in the next commit. However, git add doesn't really affect the repository in any significant way — changes are not actually recorded until you run git commit.

git add . # добавить все файлы в индекс
git add -i # запускает интерактивный режим добавления файлов
git add -p|--patch # запускает режим где можно указать какую часть файла добавить в staging.

Commit

The git commit command commits the staged snapshot to the project history. Committed snapshots can be thought of as “safe” versions of a project — git will never change them unless you explicitly ask it to.

Когда вы делаете коммит, git создаёт новый объект коммита, используя файлы в staging area, а текущей коммит становится родителем для нового. После этого указатель текущей ветки перемещается на новый коммит.

Modify commit

Команда git commit --amend позволяет перезаписать/изменить предыдущий коммит. Эта команда создаёт новый коммит, родителем которого будет родитель ошибочного коммита. Старый ошибочный коммит будет отброшен, конечно же если только на него не будет ещё каких-либо других ссылок, что маловероятно.

По умолчанию git commit --amend берет текущую область индексирования и добавляет её в прошлый коммит. Если сцена пуста, то будет изменено только сообщение предыдущего коммита.

Don’t amend public commits.

Stash

Сохраняет изменения (модифицированные и staged файлы) в базе данных гита и сбрасывает HEAD на последний коммит.

git stash

Использование stash:

  • git stash apply восстанавливает последний слепок из stash-базы оставляя его там. Могут возникать конфликты слияния, если один и тот же файл менялся после выполнения stash. Способы разрешения конфликтов те же.

  • git stash pop - восстанавливает скрытые файлы и убирает их из списка.

  • git stash --keep-index - скрывает файлы, но оставляет сцену

  • git stash --include-untracked|-u - скрывает как отслеживаемые, так и неотслеживаемые файлы.

  • git stash --patch - интерактивный режим, где можно указать какие именно файлы сохранить.

  • git stash --all - сохранить все, даже

  • git stash drop stash@{1} -

  • git stash clear - очистить базу данных сохраненных изменений

  • git stash branch branch-name - создает новую ветку, переходит к коммиту, в котором вы находились на момент скрытия работы, копирует в новую ветку содержимое буфера и очищает его, если изменения прошли успешно. Следует использовать, если на момент восстановления возможны конфликты.

Tags

Last updated

Was this helpful?