Как исключить коммит из истории git?
Вчера в истории появились коммиты которые не должны были попасть в git
Выглядит это так
Получилось так, что нужно было почистить файлы которые в .gitignore, но в тоже время и продолжают трекаться гитом.
Чтоб это сделать выбрали этот метод
https://stackoverflow.com/a/23839198/5709159
и действительно все получилось. Но в итоге оказалось, что не все файлы которые были в .gitignore на самом деле должны были быть удалены.
Проблема в том, что теперь эти комиты запушены и их нужно удалить.
У кого какие идеи как это можно сделать?
Можно ли как то взять удаленые файлы (они ведь все отмечены в коммите) и вернуть из обратно в историю как новый коммит?
P.S. Файлы были в истории, потом их удалили (хотя не нужно было) и запушили в гит. Теперь нужно эти файлы вернуть обратно.
Изменения нужно не просто откатить. А скажем были комиты A - B - C - D коммит A содержит нужные файлы, далее в коммите B эти файлы удаляют далее продолжают работать и делают уже нормальные комиты с нужными имплементациями C и D . Что получается. Нам нужно исключить коммит B тоесть нам нужно вернуть все файлы которые в нем были удалены из коммита A, но так же нам нужно оставить изменения C и D. В итоге должно выйти так A - C - D. Или можно сделать, что то вроде такого A - B - C - D - B
Ответы (1 шт):
Самый простой способ отменить изменения сделанные в комите это воспользоваться командой git revert:
git revert <commit-id>
Т.е. если есть история комитов A - B - C - D, то после команды:
git revert B
Будем иметь историю A - B - C - D - E, где в комите E - изменения обратные изменениям внесенным комитом B.
Если нужно отменить только часть изменений сделанных в комите, то можно добавить параметр --no-commit:
git revert --no-commit <B-commit-id>
В этом случае изменения комит E не будет создан автоматически, будут сделаны изменения обратные B в рабочей директории, которые можно вручную подправить и дальше уже использовать git add и git commit.
