Se o Git continuar listando um arquivo mesmo que ele coincida com .gitignore, remova-o do índice do Git, mantendo a cópia local intacta. No Terminal, acesse o repositório, execute git rm --cached -- "path/to/file", e então faça o commit dessa remoção preparada e da regra de ignore. A documentação do Git confirma que regras de ignore afetam arquivos não rastreados; elas não param o rastreamento de arquivos que já estão no índice. (Documentação do gitignore do Git)
Por que .gitignore não parou de rastrear o arquivo
Um padrão de .gitignore diz ao Git para ignorar caminhos correspondentes não rastreados. Se um arquivo já foi adicionado ao repositório, o Git continua a rastrear as alterações nele, independentemente de uma regra de ignore adicionada posteriormente. A regra pode estar correta e ainda assim parecer não ter efeito até que você remova esse arquivo do índice. (Documentação do gitignore do Git)
No Mac, abra o Terminal e mude para a pasta raiz do repositório. A Apple documenta o Terminal como a interface de linha de comando do macOS e identifica o zsh como o shell padrão; os comandos abaixo funcionam na configuração habitual do zsh. Confirme que você está no repositório correto antes de alterar seu índice:
git status
O caminho do arquivo no próximo comando é relativo à raiz do repositório. Substitua o exemplo pelo caminho real. Mantenha as aspas: elas protegem espaços e caracteres como * para que não sejam interpretados pelo shell. O -- marca o fim das opções, portanto, um caminho que comece com um hífen será tratado como um caminho.
Remova o arquivo do índice e mantenha a cópia no Mac
Execute:
git rm --cached -- "path/to/file"
--cached remove o caminho do índice do Git, e não da árvore de trabalho (working tree). O arquivo deve permanecer no seu Mac. Isso prepara (stages) uma remoção para o próximo commit; não apaga o histórico de commits anteriores do arquivo. (Documentação do git rm do Git)
Se o caminho estiver dentro de um diretório e você quiser parar de rastrear o diretório inteiro, adicione -r e use o caminho dele:
git rm --cached -r -- "path/to/directory"
Use isso com cuidado: o Git remove do índice todos os caminhos rastreados sob esse diretório. Os arquivos locais permanecem, mas a remoção fica preparada. Se o Git recusar porque o arquivo tem alterações preparadas (staged) ou seu conteúdo difere da versão no commit mais recente, pare e inspecione git status; não adicione -f a menos que você entenda quais alterações preparadas serão descartadas. O Git documenta o uso de force como uma forma de sobrescrever sua proteção padrão para tais alterações. (Documentação do git rm do Git)
Verifique a regra de ignore e revise o que será commitado
Certifique-se de que o padrão de .gitignore corresponda ao caminho a partir do local desse arquivo de ignore. Por exemplo, uma regra no .gitignore da raiz do repositório contendo local-settings.json corresponde a arquivos com esse nome em qualquer nível de diretório; /local-settings.json restringe a correspondência à raiz do repositório. Os padrões do Git são relativos ao diretório que contém o .gitignore, e arquivos de ignore mais específicos em níveis inferiores podem afetar o resultado. (Documentação do gitignore do Git)
Pergunte ao Git qual regra corresponde ao arquivo agora não rastreado:
git check-ignore -v -- "path/to/file"
A opção -v mostra a origem e o padrão responsável. Se isso não imprimir nada, verifique novamente a grafia, o caminho e a localização do padrão. O FAQ do Git recomenda git rm --cached juntamente com um padrão de ignore correspondente para parar de rastrear e ignorar um arquivo já rastreado. (Git FAQ)
Revise a alteração preparada e a cópia de trabalho antes de commitar:
git status
O status deve mostrar o caminho preparado como excluído e o .gitignore como modificado caso sua alteração ainda não esteja preparada. O arquivo de trabalho ainda deve estar presente. Prepare o arquivo de ignore se necessário e, em seguida, faça o commit de ambas as alterações:
git add -- .gitignore
git commit -m "Stop tracking local file"
Se o arquivo de ignore relevante estiver em um subdiretório, use seu caminho relativo ao repositório no git add. Revise git status novamente antes de commitar, especialmente se houver outros trabalhos preparados, para que o commit contenha apenas as alterações desejadas.
O que acontece após o commit
Após o commit, o Git não rastreia mais esse caminho na branch atual, e a regra de ignore impede que ele seja adicionado novamente por engano. O commit registra uma remoção; portanto, os colaboradores que fizerem checkout desse commit verão o arquivo rastreado ser removido de suas respectivas árvores de trabalho; a cópia local ignorada de cada pessoa não é preservada automaticamente pelo Git. Alinhe com a equipe antes de commitar se o arquivo contiver configurações compartilhadas que os colegas ainda precisem. As versões commitadas anteriormente permanecem no histórico do repositório, portanto, este procedimento não remove cópias passadas. (Documentação do git rm do Git)
Se a sua intenção era apenas ocultar edições locais mantendo o arquivo rastreado para todos, o .gitignore não é o mecanismo correto. O Git desaconselha o uso de assume-unchanged ou skip-worktree para essa finalidade; considere utilizar um modelo (template) rastreado e um arquivo de configuração local separado e ignorado. (Git FAQ)
Fontes
Git FAQ — Git
Alterar o shell padrão no Terminal do Mac — Suporte da Apple