Задача: внести изменения в файлы в старом коммите (не самом последнем/свежем).
Как изменить файлы в старом коммите
- Если вы уже изменили какие-либо файлы, то сначала нужно спрятать изменения. Для этого выполняем команду:
git stash
- Посмотрим список коммитов:
git log --oneline
- Выполняем команду git rebase -i и указываем ей коммит, который мы хотим изменить. В данном случае мы хотим изменить третий коммит (относительно HEAD).
git rebase -i HEAD~3
- Откроется текстовый редактор со списком коммитов. Измените слово pick на edit (или просто на букву e) у коммита, который вы хотите изменить.
- Сохраните изменения в файле. Вы снова окажетесь в командной строке.
- Теперь внесите те изменения, которые вы хотели сделать с файлами. Если вы на первом шаге спрятали эти изменения, то сейчас их можно снова извлечь:
git stash pop
Или же просто отредактируйте файлы.
- Добавьте отредактированные файлы в индекс:
git add myfile1 myfile2
- Применим наши изменения к коммиту:
git commit --amend --no-edit
- Завершим процесс ребейза:
git rebase --continue
Если все пройдет успешно, то появится сообщение вида:
Successfully rebased and updated refs/heads/master.
Как изменить несколько коммитов
Предположим, что нам нужно внести изменения сразу в несколько коммитов.
Выполняем последовательность действий, описанную выше, но на шаге 4 нужно указать несколько коммитов, которые вы хотите изменить. Для этого нужно изменить слово pick на edit сразу у нескольких коммитов в списке.
После сохранения файла (шаг 5) вы переключитесь на первый коммит (который старее), который вы пометили для редактирования.
Выполните для него шаги с 6 по 8. После этого вы переключитесь на следующий коммит, который вы пометили для редактирования. И так далее.
Комментарии