Общее правило
Пока изменения не отправлены на сервер, править историю безопасно. После отправки — опасно, потому что чужие копии разъедутся с вашей.
Отсюда простое разделение: локально можно почти всё, в общей ветке — почти ничего.
Забыли добавить файл в последнее сохранение
Добавьте файл и повторите сохранение с исправлением:
git add забытый_файл
git commit --amend --no-edit
Флаг означает «не менять сообщение». Прошлое сохранение заменится новым, включающим файл.
Написали плохое сообщение
git commit --amend -m "новое понятное сообщение"
Работает только для последнего сохранения и только если оно не отправлено.
Сохранили не то
Отменить последнее сохранение, оставив изменения в файлах:
git reset --soft HEAD~1
Отменить и убрать из области подготовки, но файлы не трогать:
git reset HEAD~1
Отменить и выбросить изменения совсем:
git reset --hard HEAD~1
Последняя команда удаляет вашу работу без возможности лёгкого возврата. Пользуйтесь осознанно.
Изменения уже отправлены
Переписывать историю нельзя — сделайте обратное изменение:
git revert хеш_сохранения
Создастся новое сохранение, отменяющее старое. История остаётся честной, у всех всё сходится.
Это правильный способ в общей ветке.
Случайно отправили пароль или ключ
Первое и главное: считайте его раскрытым и немедленно смените. Удаление из истории не отменяет того, что он мог быть скачан.
Только после смены занимайтесь чисткой истории. Для этого есть специальные инструменты, а если репозиторий учебный и небольшой — иногда проще создать новый.
Порядок именно такой: сначала сменить ключ, потом чистить.
Испортили рабочую папку
Отменить изменения в одном файле:
git checkout -- имя_файла
Отменить все незафиксированные изменения:
git reset --hard
Отложить изменения, чтобы вернуться к ним позже:
git stash
Достать отложенное обратно:
git stash pop
Последняя пара выручает, когда надо срочно переключиться на другую ветку, а работа не закончена.
Как найти потерянное
Если кажется, что работа пропала, посмотрите журнал перемещений:
git reflog
Там видны все состояния, где вы были, включая те, что уже не в истории. По найденному идентификатору можно вернуться.
Это спасательный круг: потерять работу окончательно сложнее, чем кажется.
Главный совет
Перед опасной операцией сделайте копию ветки:
git branch резервная-копия
Секунда работы, а спокойствие полное: если что-то пойдёт не так, всё на месте.
Хватит читать — пора делать
На CohortX можно найти команду под пет-проект и получить тот самый опыт, о котором спрашивают на собеседовании.
Похожие статьи
- Working as a team: branches, merges and conflictsHow collaborative work on code is arranged, why branches exist, how to resolve conflicts and stay out of each other's way.
- Работа в команде: ветки, слияния и конфликтыКак устроена совместная работа над кодом, зачем нужны ветки, как разрешать конфликты и не мешать друг другу.
- Fixing mistakes in your history without breaking thingsWhat to do when you committed the wrong thing, forgot a file, wrote a bad message, or pushed a password.