Saturday, September 21, 2019

Очистить все коммиты в git

Всем привет!

Сегодня мы разберем проблему, когда необходимо стереть всю историю комментариев, но при этом оставить все изменения в текущей ветке. Итак, поехали.

Во-первых, нам необходимо создать сиротскую ветку от текущей ветки (которую мы потом будем удалять). Пусть наша текущая ветка будет называться develop. Создадим сироту
git checkout --orphan develop_temp
В данной ветке нет ни одного комментария, но есть все файлы, которые были в ветке develop. Теперь нам нужно добавить все файлы в нашу новую ветку develop_temp
git add -A
git commit -am "first commit"
Идем дальше. Удаляем нашу ветку-родитель (у нас же есть сирота, а у сироты не бывает родителей ;) )
git branch -D develop
После этого переименовываем ветку-сироту по имени ветки-родителя
git branch -m develop
И наконец зальем все в нашу репу
git push -f origin develop
P.S. в данном подходе есть одна проблема, при мерджинге (или ребейзе). Проблема эта выглядит как сообщение об ошибке
fatal: refusing to merge unrelated histories
Происходит это потому, что два несвязанных проекта пытаются смерджиться. Решается эта проблема при первом мердже командой allow-unrelated-histories. Как вариант это работает вот так
1. git pull origin master --allow-unrelated-histories 
2. git merge develop --allow-unrelated-histories
Да вот собственно и все. Всем успехов! 

No comments: