Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

Удалить ненужные коммиты

#git #github


Есть вот такой перечень коммитов.


коммит 5
коммит 4 
коммит 3
коммит 2
коммит 1


Хочу удалить коммиты 5, 3 и 2. Т.е не просто убрать их видимость в ветке, а удалить
насовсем. Можно ли это сделать с сохранением коммита 4?
    


Ответы

Ответ 1



Для подобного действия Вам нужен интерактивный rebase. Если кратко, тогда так вначале нужно его запустить git rebase -i HEAD~6 Вместо HEAD~6 (шесть коммитов назад), можете взять хеш любого коммита перед коммитом 1. Откроется вим или другой редактор. Там будет список коммитов. Теперь удаляем ненужные коммиты (просто удаляем строки). Если это вим, тогда просто нажимаем дважды d на нужных строках (то есть тех, которых нужно удалить). Потом выходим с редактора (если это вим - Esc :wq). После этого git откатит эти коммиты и накатит их по новому. Вполне возможно, что нужно будет по ходу дела решать конфликты. Помните, что на самом деле старые коммиты никуда не уйдут, просто будут созданы новые коммиты. Если эти коммиты уже были запушены на удаленный сервер, то лучше не делать подобного. Но если над проектом работаете только Вы, то нет ничего страшного. Но пуш придется делать форсированным (-f).

Ответ 2



Если нужно сохранить один коммит из середины истории - проще сделать cherry-pick: git co -b branch_name commit1 git cherry-pick commit4 // где commitN - hash набора изменений требуемого коммита // Так можно последовательно отбирать интересующие вас изменения После этого у вас появится ветка branch_name вида (коммит1) - (коммит 4)

Комментариев нет:

Отправить комментарий