Шпаргалка по GIT (2022)

В этом материале я расскажу о самых полезных командах Git, которые могут выручить вас в критической ситуации.
Как отменить изменения в файле в Git?
- Действие: поменяли содержимое файла
- Цель: отменить все изменения
git checkout HEAD <название файла>
Как вернуть файл после удаления в Git?
- Действие: удалили файл
- Цель: вернуть файл
git checkout HEAD <название файла>
Как отменить часть изменений файла в Git?
- Действие: поменяли содержимое файла
- Цель: убрать часть изменений в файле
git checkout -p <название файла>
Как отменить все изменения в Git?
- Действие: поменяли/удалили/добавили файлы, не успев закоммитить.
- Цель: вернуть репозиторий в исходное состояние
git reset --hard HEAD <название файла>
Как изменить последний коммит в Git?
- Действие: закоммитили, поняли, что забыли кое-что поменять.
- Цель: добавить изменения в последний коммит, не создавая новый после добавления изменений в индекс Git.
git commit --amend --no-edit
Как отменить коммиты в Git? (мягкий способ)
- Действие: закоммитили что-либо
- Цель: отменить изменения коммита
Revert, в отличие от reset, не возвращает историю к определенному коммиту, а позволяет создать новый коммит, в котором изменения будут противоположны сохранённым в коммите, который хотим отменить.
git revert <хэш комита>
Как отменить коммиты в Git? (жесткий способ)
- Действие: закоммитили что-либо
- Цель: отменить изменения коммита
git reset --hard <хэш комита>
Флаг --hard удаляет локальные изменения, то есть получаем чистый репозиторий. Если же мы хотим отменить последний коммит, но потеряв изменения в нем, выполняем reset без флага --hard.
Как откатить файл к старому состоянию в Git?
- Цель: вернуть файл репозитория в старое состояние.
Чтобы просмотреть старое состояние по конкретному файлу, можно использовать git log -- <название файла>
git checkout <хэш комита> -- <название файла>
Как отменить откат коммита (git reset) в Git?
- Цель: использовали команду
git reset
. Хотим отменить её, вернув репозиторий в прежнее состояние.
- С помощью команды
git reflog
находим хэш коммита, который был последним до командыreset
. - Создаем новую ветку
git branch <название ветки> <хэш коммита до reset>
, где последним коммитом будет наш коммит, который был последним до выполнения git reset.
Как вернуть удаленную ветку в Git?
- Действие: ошибочно удалили ветку с помощью git branch -d -f <название ветки>
- Цель: хотим ее вернуть
- Используем
git log -- <название файла>
для поиска хэша последнего коммита удаленной ветки. Обычно это команда checkout. - Создаем новую ветку от хэша последнего коммита удаленной ветки
git branch <название ветки> <хэш последнего коммита удаленной ветки>
Как перенести коммит в новую ветку в Git?
- Действие: ошибочно закоммитили изменения не в ту ветку
- Цель: перенести коммит в новую ветку
- Создаем новую ветку от ветки, где был создан коммит
git branch <название ветки>
. Находясь в ветке, откуда хотим перенести коммит, выполняем командуgit reset --hard HEAD~1
. Таким образом, в новой ветке останется новый коммит, а в старой он будет удален.
Как перенести коммит в существующую ветку?
- Действие: ошибочно закоммитили изменения не в ту ветку
- Цель: перенести коммит в существующую другую ветку
- Запоминаем хэш коммита, который хотим перенести из ветки А в ветку Б. Находясь на ветке Б, выполняем команду
git cherry-pick <хэш коммита>
. - Удаляем последний коммит из ветки А командой
git reset --hard HEAD~1
Cherry-pick - опасная команда. Использовать ее следует с особой осторожностью. В текущем кейсе проблем не будет, однако бывают и другие кейсы. Крайне рекомендую прочитать данную серию из 10 статей в блоге Microsoft.
Поменять комментарий старого коммита
- Действие: создали коммит с плохим комментарием
- Цель: изменить комментарий коммита
Чтобы изменить комментарий последнего коммита, просто используем git commit --amend -m '<комментарий>'
. Если же коммит не последний, выполняем команду git rebase -I HEAD~<n>
, где <n> - это индекс коммита, который будет выбран в качестве базового в интерактивном режиме. Если вам нужно поменять пятый по счету коммит (если считать от последнего), выполняем git rebase -i HEAD~5
и в интерактивном режиме меняем pick на reword и закрываем редактор, после чего опять откроется редактор для изменения названия коммита.
Объединить несколько последних коммитов в Git
- Действие: в процессе работы создали кучу мелких коммитов
- Цель: объединить все в один, чтобы история коммитов была чистой
- Команда:
git rebase -i <хэш коммита в который хотим всё объединить>
После выполнения команды откроется интерактивный режим в котором нужно возле каждого коммита, который будет влит в коммит, указанный аргументом к rebase, заменить pick
на flush
.
Удалить все локальные ветки кроме master в Git
- Действие: поработали над множеством фич
- Цель: хотим почистить репу от веток, с которыми уже не работаем
- Команда:
git branch | grep -v "master" | xargs git branch -D