2012-05-31 3 views
2

В мой репозиторий git добавлен большой двоичный файл 20 коммитов назад. Удаление этого с:git filter-branch only change affected commits

git filter-branch --index-filter "git rm --cached --ignore-unmatch FILE" \ 
    --prune-empty HEAD 

изменяет SHA1 для каждой фиксации (~ 1100) в своей истории проектов. Он удаляет файл, но я надеялся иметь только git push -f небольшое количество измененных коммитов. Есть ли способ сообщить filter-branch только для изменения коммитов с FILE и комментариями потомков, в моем случае около 20 коммитов?

+0

Я считаю, что каждая переменная SHA1 связана с тем, что она обновляет информацию об участниках. –

ответ

6

Если вы знаете, что зафиксировал введенный файл, самым простым способом является указать $SHA^..HEAD (где $SHA - это фиксация, которая его представила). Это предотвратит даже просмотр старых коммитов.

Если коммит, который ввел этот файл только ввел его, и ничего больше, и никаких других фиксаций с тех пор коснулся его, то вы можете избавиться от него еще проще без фильтра-ветви, используя git rebase --onto $SHA^ $SHA (где $SHA - это фиксация, которая представила этот файл). Это просто отключит фиксацию $SHA из истории.

+0

Первое предложение работает хорошо. В этом случае фиксация содержит много других изменений (часть причины, по которой двоичный код оказался там в первую очередь). Спасибо, что преподал мне флаг -onto! – devoid