TL; DR
Вы, вероятно, хотели:
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch Pods'
Обратите внимание на -r
здесь. Но читайте дальше, если это не совсем то, что вы имели в виду.
Long
Когда вы запускаете git push
, ваш Git подключается к другому Git - в данном случае к GitHub - и предлагает ему commits . Это не файлы: , это коммит . Но коммиты содержат файлы. Таким образом, настоящий вопрос здесь заключается в следующем: какой коммит или коммит является вашим Git, отправляющим их Git, которые содержат файл:
Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds
Вы хотите избавиться от этих коммитов, возможно, заменив их новыми и улучшенными коммитами, которые содержат все остальные файлы, но не этот файл.
Вы подошли довольно близко с этим:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch Pods'
потому что git filter-branch
означает, что берет коммиты, достижимые из начальных точек, которые я перечисляю, и копирую их в новые и улучшенные коммиты замены, к которым применены эти фильтры: <вставить список ваших фильтров здесь>. Есть два способа, которыми это могло пойти не так, один из которых наиболее вероятен:
Соответствующие коммиты недоступны из вашего текущего коммита. Для длительного обсуждения названий веток и достижимости прочитайте учебное пособие по Think Like (a) Git . Этот веб-сайт - хорошая идея, если вы некоторое время использовали Git.
Причина, по которой это не , вероятно, там, где что-то пошло не так, заключается в том, что по умолчанию git push
отправляет коммиты, которые находятся в вашей текущей ветке (за исключением того, что вам не нужно отправлять те, которые Git на GitHub еще не имеет). Это также значение по умолчанию для git filter-branch
: все фиксации в ветке current . Поскольку вы не указали ни одной начальной точки, обе команды работали в ветви current .
(Вы не указали ни свою действительную команду git push
, ни вашу версию Git, поэтому мне пришлось сделать разумное предположение. В противном случае я мог бы быть на 100% уверен, что это не проблема.)
Фильтр, который вы перечислили, не подходит для выполнения улучшений.
Фильтр, который вы дали, был индексным фильтром, состоящим из запроса на удаление файла с именем Pods
, без жалоб, если такого файла нет. Файл, который нужно удалить, вообще не называется Pods
, он называется Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds
.
Вы можете добавить флаг -r
, который говорит Git удалить любой файл, путь к которому начинается с Pods/
. Это приведет к удалению не только Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds
, но и Pods/This/Is/A/Silly/Made/Up/File/Name
и т. Д.
Или вы можете прописать один конкретный файл и убрать флаг -r
.
Или, конечно, могут применяться обе ситуации, но я бы поставил только на среднюю - вы хотите улучшить --index-filter
.
Будет ли улучшено использование -r
, или прописано полное имя файла, или что-то среднее между ними - возможно:
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework'
или
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch Pods/Google-Mobile-Ads-SDK'
Например - это вопрос, на который могут ответить только вы: какие файлы вы хотите в своих коммитах, а какие - нет? (Обратите внимание, что коммиты не содержат никаких каталогов, в некотором смысле: они содержат только файлы , как указано их полными именами. Git автоматически создаст любые содержащие каталоги, если и когда это необходимо.)