Как это отменить?! Git-команды для исправления своих ошибок
Если вы что-то сделали в Git'е, а потом очень сильно пожалели, не отчаивайтесь: возможно, всё можно исправить. Рассказываем, как это сделать.
38К открытий40К показов
Если вы ошиблись в Git’е, разобраться, что происходит и как это исправить, — непростая задача. Документация Git — это кроличья нора, из которой вы вылезете только зная конкретное название команды, которая решит вашу проблему.
Рассказываем о командах, которые помогут вам выбраться из проблемных ситуаций.
Вот блин, я сделал что-то не то… У Git ведь есть машина времени?!
Так вы можете восстановить то, что случайно удалили, и откатить слияние, после которого всё сломалось. reflog
используется очень часто — давайте поблагодарим того, кто предложил добавить его в Git.
Я только что сделал коммит и заметил, что нужно кое-что поправить!
Обычно эта команда нужна если вы что-то закоммитили, а потом заметили какую-то мелочь, например отсутствующий пробел после знака =
. Конечно вы можете внести изменения новым коммитом, а потом объединить коммиты с помощью rebase -i
, но это гораздо дольше.
Внимание Никогда не изменяйте коммиты в публичной ветке. Используйте эту команду только для коммитов в локальной ветке, иначе вам конец.
Мне нужно изменить сообщение последнего коммита!
Тупые требования к оформлению сообщений…
Я случайно закоммитил что-то в мастер, хотя должен был в новую ветку!
Команды не сработают, если вы уже закоммитили в публичную ветку. В таком случае может помочь git reset HEAD@{какое-то-количество-коммитов-назад}
вместо HEAD~
.
Ну отлично. Я закоммитил не в ту ветку!
Многие в такой ситуации предлагают использовать cherry-pick
, так что можете выбрать, что вам больше по душе.
Я пытаюсь запустить diff, но ничего не происходит
Если вы знаете, что изменения были внесены, но diff
пуст, то возможно вы индексировали изменения (через add
). Поэтому вам нужно использовать специальный флаг.
Конечно, «это не баг, а фича», но с первого взгляда это чертовски неоднозначно.
Мне нужно каким-то образом отменить коммит, который был сделан 5 коммитов назад
Вам не обязательно откатываться назад и копипастить старые файлы, замещая ими новые. Если вы закоммитили баг, то коммит можно отменить с помощью revert
.
Помимо этого, откатить можно не целый коммит, а отдельный файл. Но следуя канону Git’а, это будут уже совсем другие команды…
Мне нужно отменить изменения в файле
Именно поэтому checkout
— лучший инструмент для отката изменений в файлах.
Давай по новой, Миша, всё х**ня
Если вам нужно полностью откатиться до исходной версии (т. е. отменить все изменения), то можете попробовать сделать так.
Будьте осторожны, эти команды разрушительны и необратимы.
Эти команды Git нужны для экстренных ситуаций, но пригодиться могут не только они. Про другие команды с пояснениями писали тут:
38К открытий40К показов