6. Переход между коммитами
git log
git log - позволяет просматривать историю коммитов, производить поиск по тексту сообщений в коммитах, по измененным файлам, по датам, по авторам, по веткам и прочим параметрам
По умолчанию история коммитов выводится в обратном хронологическом порядке (выше - новее)
- -p - full-diff, показыавет дифф от коммита
Также можно управлять выводом деталей в git log при помощи готовых пресетов и параметра --pretty
. Доступные пресеты: oneline, short, full и fuller
Пример использования:
git log --pretty=oneline
111111 commit1
222222 commit2
333333 commit3
Кроме того, git log позволяет полностью настроить формат вывода при помощи параметра format
Пример использования format:
git log --pretty=format:"%h - %an, %ar : %s"
1111111 - Name Surname, 9 months ago : commit1
2222222 - Name Surname, 10 months ago : commit2
3333333 - Name Surname, 11 months ago : commit3
Где %h
- хэш коммита, %an
- имя автора, %ar
- относительная дата, %s
- сообщение коммита
git checkout подходит не только для переключения между ветками, но и между коммитами и тегами:
git checkout [options] [<branch>]/<commit>/<tag>
git checkout [options] <file_name_to_restore>
git log --all --grep='commit message' # позволит отыскать коммит мессадж
Пример решения задачки со степика
box@b888ffedb096: ~/REPO $ git log --all --grep='Git rules!' --pretty=format:%H
> /home/box/answer
git stash
https://www.git-scm.com/docs/git-stash
Эта команда нужна для сохранения изменений которые по каким-то причинам не нужно включать в коммит. Например при переключении между ветками
stash сохраняет текущее состояние репозитория без создания коммита
Сохраняются только измененные отслеживаемые файлы
Неотслеживаемые файлы в stash не включаются
Сохранить незакоммиченную информацию перед переключением ветки можно было бы с помощью squash'a, но stash подходит лучше (squash позволяет объединять коммиты в один)
git stash
- эквивалентна git stash push
, которая сохраняет текущее состояние в стэш
Посмотреть записи в стэше можно с помощью git stash list
Стэш существует назависимо от бранчей
WIP - work in progress
git stash pop/apply
- позволяют извлечь состояние из стэша
После команды pop/apply указывается индекс записи в стэше, если не указать то будет взята последняя
Для удаления записей из стэша - git stash drop
git reset
Указатель HEAD указывает на указатель вершины ветки (например master)
macbook:test vandud$ git log --all --oneline
0ba27fa (HEAD -> master, origin/master) clear working tree
27b74a8 dick
2132219 Merge branch 'vandud'
...
macbook:test vandud$ git reset --soft HEAD~
macbook:test vandud$ git log --all --oneline
0ba27fa (origin/master) clear working tree
27b74a8 (HEAD -> master) dick
2132219 Merge branch 'vandud'
59b8d9f aoue
...
- git checkout - перетаскивает указатель HEAD
- git reset - перетаскивает указатель вершины ветки
У git reset есть три важных ключа
-
--soft
- перемещается HEAD, но индекс и рабочий каталог не меняется -
--mixed
- soft + изменение индекса -
--hard
- mixed + изменение рабочего каталога
То есть checkout переключает нас на какой-то коммит, а reset откатывает
No Comments