2016-09-26 2 views
0

У меня есть небольшой личный проект, который представляет собой репозиторий git с только ведущей ветвью и несколькими коммитами в нем. (На самом деле, 19). Я обнаружил, что случайно включил в репо несколько файлов .psd. Это произошло на 7-м коммите. Я понял свою ошибку на 17-м фиксации и добавил .psd в .gitignore.Как ретроактивно удалить определенные типы файлов из нескольких git-коммитов

Как сделать ретроактивное удаление определенных файлов (в данном случае * .psd) из этих коммитов? В качестве альтернативы, как мне удалить свою папку из коммитов?

Будет ли это: git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.psd' HEAD, согласно this page?

ответ

0

Ваша команда почти корректна, за исключением того, что вам необходимо указать диапазон комманд, по которым можно применить ветвь фильтра. Я боюсь, что, как вы сейчас это сделали, вы можете применить его ко всей своей истории, которая может быть не такой, какой вы хотите. Предполагая, что вы хотели, чтобы охватить весь диапазон от фиксации, содержащего .psd файлов в настоящее время, вы будете использовать:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.psd' HEAD~12..HEAD 

Я предполагаю, что у вас есть 19 фиксаций, в которых HEAD~12 будет ссылаться на 7 совершают.

Update:

Если вы беспокоитесь о разрыве что-то, используя filter-branch, то первый толчок ветвь к удаленному в качестве резервной копии:

git push origin your_branch 

еще лучше, нажмите на ветку с другое имя, например

git push origin your_branch:backup_branch 

Если что-то пошло не так, вы можете просто удалить свою локальную ветку и снова вытащить с пульта.

+0

Я еще не выполнил команду, к счастью. Есть ли способ запустить эту команду в виде тестового запуска? Кроме того, мне было бы хорошо удалить файлы .psd из всех коммитов, но они присутствуют только в нескольких из них. – Flobin

+0

@Flobin Я обновил свой ответ, предоставив вам вариант безопасности, который вы можете использовать для защиты от бедствий. –