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

Олег Кусов20.02.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. Хотим отменить её, вернув репозиторий в прежнее состояние.
  1. С помощью команды git reflog находим хэш коммита, который был последним до команды reset.
  2. Создаем новую ветку git branch <название ветки> <хэш коммита до reset>, где последним коммитом будет наш коммит, который был последним до выполнения git reset.

Как вернуть удаленную ветку в Git?

  • Действие: ошибочно удалили ветку с помощью git branch -d -f <название ветки>
  • Цель: хотим ее вернуть
  1. Используем git log -- <название файла> для поиска хэша последнего коммита удаленной ветки. Обычно это команда checkout.
  2. Создаем новую ветку от хэша последнего коммита удаленной ветки git branch <название ветки> <хэш последнего коммита удаленной ветки>

Как перенести коммит в новую ветку в Git?

  • Действие: ошибочно закоммитили изменения не в ту ветку
  • Цель: перенести коммит в новую ветку
  1. Создаем новую ветку от ветки, где был создан коммит git branch <название ветки>. Находясь в ветке, откуда хотим перенести коммит, выполняем команду git reset --hard HEAD~1. Таким образом, в новой ветке останется новый коммит, а в старой он будет удален.

Как перенести коммит в существующую ветку?

  • Действие: ошибочно закоммитили изменения не в ту ветку
  • Цель: перенести коммит в существующую другую ветку
  1. Запоминаем хэш коммита, который хотим перенести из ветки А в ветку Б. Находясь на ветке Б, выполняем команду git cherry-pick <хэш коммита>.
  2. Удаляем последний коммит из ветки А командой 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