Как исключить коммит из истории 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 шт):

Автор решения: Roman Konoval

Самый простой способ отменить изменения сделанные в комите это воспользоваться командой 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.

→ Ссылка