Se você preparou (stage) um arquivo em um projeto Git no Mac, mas quer deixá-lo de fora do próximo commit, execute git restore --staged para esse arquivo a partir do Terminal. Isso atualiza a área de preparação do Git e mantém o arquivo na sua pasta de trabalho, para que as edições continuem disponíveis para revisão ou para preparação posterior. Verifique o caminho do arquivo e confirme o resultado com git status antes de fazer o commit.
O que a ação de retirar da preparação (“unstage”) altera
O Git mantém a proposta do próximo commit no seu índice (index), também chamado de área de preparação (staging area). Um commit normalmente inclui as alterações preparadas; as edições que você não preparou permanecem na sua árvore de trabalho (working tree). Remover um arquivo do índice, portanto, altera o que está preparado para o commit, sem pedir ao Git para reescrever a cópia de trabalho. A documentação do Git descreve o git restore --staged como uma restauração do índice a partir do HEAD por padrão. Documentação do restore do Git
Isso é útil quando você preparou o arquivo errado ou decidiu que determinado arquivo deve ficar de fora de um commit. O comando é específico por arquivo quando você fornece um único caminho. Não adicione --worktree: a documentação do Git indica que usar tanto --staged quanto --worktree restaura ambos os locais, o que não é o objetivo quando você deseja manter suas edições.
Retirar um arquivo da preparação a partir do Terminal
Abra o Terminal no Mac e mude para a pasta do repositório. O shell padrão do Terminal é o zsh, embora um Mac gerenciado possa usar um shell diferente. Guia do Terminal da Apple
Execute git status primeiro. Localize o arquivo preparado sob “Changes to be committed” e anote o seu caminho relativo à raiz do repositório. Se você vir um repositório diferente ou o caminho não estiver claro, pare e verifique sua localização antes de alterar qualquer coisa.
Por exemplo, para retirar src/Feature.swift da preparação, execute:
git restore --staged -- src/Feature.swift
O -- separa as opções do caminho. Ele é útil para nomes que, de outra forma, poderiam ser interpretados como opções. Coloque entre aspas os caminhos que contêm espaços para que o zsh passe o caminho como um único argumento:
git restore --staged -- "Documentation/Setup Notes.md"
Use o caminho exatamente como o Git o exibe, incluindo maiúsculas/minúsculas e eventuais nomes de diretórios. Se você já estiver dentro de um subdiretório do repositório, o tratamento de caminhos do Git pode ser menos intuitivo; executar o comando a partir da raiz do repositório e usar o caminho completo relativo a ela facilita a verificação do alvo.
Confirmar se as edições ainda estão lá
Execute git status novamente. Para um arquivo rastreado e modificado, a alteração preparada deve desaparecer de “Changes to be committed” e aparecer sob “Changes not staged for commit”. Isso significa que a cópia de trabalho ainda difere de HEAD, mas o índice não contém mais essa alteração proposta. O Git descreve o status como a exibição de alterações entre o HEAD e o índice, e entre o índice e a árvore de trabalho. Documentação do add do Git
Você pode inspecionar as alterações não preparadas com:
git diff -- "src/Feature.swift"
Esse diff compara o arquivo de trabalho com o índice. Como o índice agora corresponde ao HEAD para esse arquivo rastreado, ele exibe as edições mantidas que você retirou da preparação. Para preparar o arquivo para um commit posterior, prepare-o novamente com git add -- "src/Feature.swift".
O que esperar para novos arquivos e exclusões
Se o arquivo for novo e nunca tiver sido commitado, ele não possui versão no HEAD. Depois que git restore --staged -- path/to/new-file o remove do índice, o arquivo deve continuar no disco como um arquivo não rastreado (untracked). Verifique se ele aparece sob “Untracked files” no git status; não o apague se quiser mantê-lo.
Se você preparou a exclusão de um arquivo rastreado, restaurar o índice a partir do HEAD coloca a versão rastreada de volta no índice, enquanto a cópia de trabalho permanece excluída. O status deve indicar uma exclusão não preparada. Essa distinção é importante: retirar da preparação não significa necessariamente fazer com que a árvore de trabalho pareça inalterada; isso preserva o estado atualmente presente no disco.
Se você preparou apenas parte do arquivo
O mesmo comando retira da preparação todo o conteúdo preparado do arquivo. Se você preparou intencionalmente alguns blocos (hunks) e deseja manter apenas os selecionados na preparação, não execute o comando para o arquivo inteiro. O comando restore do Git oferece suporte ao modo de patch interativo, mas selecionar a direção e os blocos corretos exige cuidado. Revise o comportamento documentado de git restore --patch antes de utilizá-lo; o Git também documenta git add --patch para escolher interativamente quais blocos preparar. Documentação do restore do Git
Evite git restore --worktree ou git restore --staged --worktree para essa tarefa. Essas opções afetam a árvore de trabalho e podem descartar exatamente as edições que você está tentando manter. Se o resultado no git status for diferente do esperado, pare e inspecione o caminho e o diff antes de executar outro comando de restauração.
Fontes
Mudar o shell padrão no Terminal do Mac — Suporte da Apple