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
.
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
на последний коммит.
Использование 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