Некоторые полезные команды GIT

git clone, git add, git commit, git pull/push этими командами не удивишь и пользуемся мы ими часто. Но бывает, что иногда нужно из консоли посмотреть что-то более мощное и важное

Команды

Diff

git diff # просмотр разницы не включенных в индекс файлов
git diff --staged # просмотр разницы включенных в индекс

Log

git log # просмотр лога изменений (коммитов)
git log -p # просмотр изменений с дифом

show

git show 5120bea3e5528c29f8d1da43731cbe895892eb6d # показывает изменения конкретного коммита (в сравнении с предыдущим)
git show 5120bea3 # короткий вариант предыдущего хэша коммита

blame

git blame README.md # посмотреть изменения файла. Какие коммиты в какой строчке

grep

git grep text # ищет совпадение с указанной строкой во всех файлах проекта (игнорирует файлы из .gitignore и папку .git, так же ищет в истории)

git grep -i text # Флаг i позволяет искать без учета регистра

git grep text 5120bea3 # Поиск в конкретном коммите

git grep hexlet $(git rev-list --all) # Поиск по всей истории
# rev-list возвращает список хешей коммитов

отмена изменений — clean, restore

git clean -fd # удалить неотслеживаемые файлы (-f) директории (-d)

git restore filename # отменит полностью изменения
git restore --staged filename # исключит изменений из стейджа, но не удалит все

"откат" коммитов — revert

git revert 5120bea3e5528c29f8d1da43731cbe895892eb6d # возвращает изменения из определенного коммита

Удаление коммита. Возможно только если коммит не был отправлен во внешний репозиторий: git push

git reset --hard HEAD~ # отменит предыдущий коммит, который ещё не был отправлен

--hard — полное удаление, без него git reset отменит, но не удалит коммит, а поместит в рабочую директорию, с ними можно будет работать, если нет этого флага, считается, что --mixed
HEAD~ — один коммит от последнего коммита
HEAD~2 — два коммита от последнего

Добавление файлов в незаконченный коммит

Когда забыл файл или неверный текст в коммите, и ещё не запушил, можно добавить файлов или изменить текст коммита

git add filename # добавить недостающий файл
git commit --amend # директива сообщающая, что файл нужно добавить в предыдущий коммит

--no-edit — если не нужно менять текст коммита

Интерактивный коммит

Разделить файл на коммиты можно используя интерактивный способ сохранения коммитов
Но это не очень простой путь, поэтому нужно в этом разобраться (Подробнее тут)

git add -i

Хождеиние по истории — log, checkout

git log --oneline # сокращенный вывод
git checkout 5120bea3e5528c29f8d1da43731cbe895892eb6d # переключиться на коммит
git checkout 5120bea3 # предыдущая команда в сокращенном виде
git branch # показывает где именно (ветка, коммит и т.п.) мы находимся

Чтобы не забывать где в текущий момент находишься, можно в командной строке вывести текущую ветку или коммит. Можно это сделать в обычном терминале (по поиску branch PS1 или подобное) или настроить zsh, ну и много вариантов или почитать тут.

git switch - # быстрое переключение обратно
git log --graph # вывод в виде дерева

Временное сохранение — stash

stash работает по принципу stack

git stash # сохранение текущих изменений в stash
git stash pop # возвращение изменений из stash
git stash pop # (вызов второй раз и последующие) возвращает предыдущие изменения

Источники

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.