Info
Content

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
Back to top