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

git commit -a # git add && git commit
git commit <files>
git commit -a -m "Text" # commit all changed files, no need to do git add .
git commit −−verbose #
git config --global commit.verbose true

Modify commit

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

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

git commit --amend -m "an updated commit message" # перезаписать сообщение в предыдущем коммите
git commit --amend --no-edit # модифицировать прошлый коммит добавив файлы из staging area

Don’t amend public commits.

Stash

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

git add -A
git stash
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

git tag # list of Tags
git tag -l v1.8.5 # list tags by specic pattern

git tag -a v1.4 -m "my version 1.4" # create commented tag with specific name and comment
git show v1.4 # display all info about commented tag

git tag v1.5-beta # create lightweight tag
git tag -a v1.2 9fceb02 # add tag to specific commit

git push origin [tag name] # push tag to retote repository
git push --tags # push tags to remote repository

Last updated