FRONTEND BLOG

«Ё-моё что ж я сделал» или распространённые ошибки при работе с Git и как их исправить

Твою мать, я накосячил. Пожалуйста, можно вернуть всё обратно!?!

Спасение:

git reflog# эта команда покажет вам всё, что вы делали во всех бранчах!# у каждой записи есть идентификатор HEAD@{index}# укажем тот, что находится перед тем, как вы всё поломалиgit reset HEAD@{index}# волшебство

Таким образом можно вернуть случайно удалённые файлы, или убрать неверный код, или восстановиться после некорректного слияния, или просто вернуться назад во времени к тому моменту, когда всё работало.

Твою мать, я сделал комит и вдруг понял, что забыл внести изменение!

Спасение:

# сделаем необходимые измененияgit add .git commit --amend# следуем указаниям для изменения сообщения комита или оставьте как есть# теперь в вашем комите все изменения!

Такое случается очень часто. Вы сделали комит и вдруг поняли, что забыли что-то, или обнаружили ошибку в коде. Можно решить эту проблему иначе: сделать новый комит, а затем сделать rebase -i (чтобы объединить комиты в один), но способ, указанный выше, работает в миллион раз быстрее.

Твою мать, надо поменять сообщение последнего комита!

Спасение:

git commit --amend

Да, вот так просто. И будьте внимательней.

Твою мать, я сделал комит в бранч master, а надо было сделать новый бранч!

Спасение:

# создадим новый бранчgit branch some-new-branch-name# удалим ваш комит из бранча mastergit reset HEAD~ --hardgit checkout some-new-branch-name# теперь ваш комит только в нужном бранче :)

Помните: это актуально только для локальных комитов, для которых не выполнялся push, и только если вы не пытались как-то иначе решить проблему.

Твою мать, я сделал комит не в тот бранч!

Спасение:

# отменим последний комит, но сохраним измененияgit reset HEAD~ --softgit stash# переходим в нужный бранчgit checkout name-of-the-correct-branchgit stash popgit add .git commit -m "your message here"# теперь всё в нужном бранче

Многие в такой ситуации предпрочитают использовать cherry-pick. Выберите сами, какой метод вам по душе.

git checkout name-of-the-correct-branch# возьмём последний комит из mastergit cherry-pick master# а затем удалим последний комит из mastergit checkout mastergit reset HEAD~ --hard