#git #version-control
#git #контроль версий
Вопрос:
Итак, у меня был этот проект, в котором сначала я сделал
git add .
таким образом, я мог просто приступить к работе и не беспокоиться о том, какие файлы будут контролироваться версиями или что.
Это, конечно, было болезненно, так как в промежутках между каждой фиксацией я обычно просто меняю 3-5 файлов, все файлы сборки (.class, .html, .xml и т.д.) Полностью восстанавливаются, Что означает, что выполнение
git add .
добавит сотни файлов вместо 3-5 файлов, которые я действительно изменил.
Я знаю, что могу добавить все ненужные файлы в .gitignore
файл. Что я хотел бы сделать, так это то, есть ли способ сделать это задним числом. Я хотел бы избавиться от всех файлов, которые не должны были быть в коммитах в первую очередь.
Возможно ли это сделать в git? Если да, то каким образом?
Ответ №1:
Да, вы можете использовать git filter-branch
.
В книге Pro Git есть хороший раздел об удалении объектов из истории
--index-filter <command>
Это фильтр для перезаписи индекса. Это похоже на фильтр дерева, но не проверяет дерево, что делает его намного быстрее. Часто используется с
git rm --cached --ignore-unmatch …
, смотрите ПРИМЕРЫ ниже. Для сложных случаев смотрите git-update-index(1).
Итак, в качестве примера:
git filter-branch
--index-filter 'git rm --cached --ignore-unmatch filename'
--tag-name-filter cat
-- --all
tag-name-filter
Также есть возможность переписать ваши теги, чтобы вы их не потеряли.
Отказ от ответственности
Будьте осторожны, переписывая общедоступную историю. Вы можете сделать невозможным / трудным для других обновление или внесение вклада.
Ответ №2:
http://help.github.com/removing-sensitive-data/
Не удаление конфиденциальных данных, но, похоже, это то, что вы ищете.
git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.<filetype>' HEAD
Ответ №3:
Насколько я знаю, git не будет делать этого задним числом. Вам нужно git rm
или git rm --cached
их.