Close

git rm

Uma pergunta comum que muitas pessoas fazem ao começar a usar o Git é "Como dizer ao Git para não rastrear mais um arquivo (ou arquivos)?" O comando git rm é usado para remover arquivos de um repositório do Git. Ele pode ser considerado como o inverso do comando git add.


Visão geral do Git rm


O comando git rm pode ser usado para remover arquivos individuais ou uma coleção de arquivos. A principal função do git rm é remover arquivos rastreados do índice de Git. O git rm também pode ser usado para remover arquivos do índice de staging e do diretório de trabalho. Não existe opção de remover um arquivo de apenas um diretório de trabalho. Os arquivos sendo operadores devem ser idênticos aos arquivos no HEAD atual. Se houver uma diferença entre a versão do HEAD de um arquivo e a versão do índice de staging ou da árvore de trabalho, o Git vai bloquear a remoção. O bloqueio é um mecanismo de segurança para evitar a remoção de mudanças em progresso.

Observe que o git rm não remove as ramificações. Saiba mais sobre o uso de ramificações do git

Uso


<file>…​

Especifica os arquivos a serem removidos. O valor da opção pode ser um arquivo individual, uma lista de arquivos delimitada por espaços, file1 file2 file3, ou um glob de arquivo curinga (~./directory/*).

-f
--force

A opção -f é usada para substituir a verificação de segurança que o Git faz para garantir que os arquivos no HEAD correspondam ao conteúdo atual no índice de staging e no diretório de trabalho.

Logotipo do Git
Material relacionado

Folha de consulta do Git

Logotipo do Bitbucket
VER SOLUÇÃO

Aprenda a usar o Git com o Bitbucket Cloud

-n
--dry-run

A opção "dry run" é uma proteção que vai executar o comando git rm, porém não vai excluir de fato os arquivos. Ela vai exibir quais arquivos ela teria removido.

-r

A opção -r é uma abreviação para "recursive". Ao operar no modo recursivo, o git rm vai remover o diretório alvo e todos os conteúdos dele.

--

A opção de separador é usada para fazer a distinção explícita entre uma lista de nomes de arquivos e os argumentos sendo transmitidos ao git rm. Ela é útil se algum dos nomes de arquivo tiver uma sintaxe que possa ser confundida com outras opções.

--cached

A opção em cache especifica que a remoção deveria ocorrer apenas no índice de staging. Os arquivos do diretório de trabalho vão permanecer iguais.

--ignore-unmatch

Assim, o comando fecha com o status sigterm 0, mesmo se nenhum arquivo corresponder. Este é um código de status de nível Unix. O código 0 indica uma invocação bem-sucedida do comando. A opção --ignore-unmatch pode ser útil ao usar git rm como parte de um script de shell maior que precisa ter função de falha controlada.

-q
--quiet

A opção silenciosa oculta o resultado do comando git rm. O comando costuma resultar em uma linha para cada arquivo removido.

Como desfazer o git rm


A execução de git rm não é uma atualização permanente. O comando vai atualizar o índice de staging e o diretório de trabalho. Essas mudanças não vão persistir até que um novo commit seja criado e as mudanças sejam adicionadas ao histórico de commits. Ou seja: as mudanças aqui podem ser "desfeitas" usando comandos comuns de Git.

git reset HEAD

A redefinição vai reverter o índice de staging atual e o diretório de trabalho de volta ao commit de HEAD. Assim, vai desfazer um git rm.

git checkout .

Um checkout vai ter o mesmo efeito e vai restaurar a versão mais recente de um arquivo do HEAD.

Caso o git rm tenha sido executado e um novo commit criado e persistente à remoção, o git reflog pode ser usado para encontrar uma referência anterior à execução de git rm. Saiba mais sobre o uso de git reflog.

Discussão


O argumento <file> indicado para o comando pode ser de caminhos exatos, padrões de glob de arquivo curinga ou nomes exatos de diretórios. O comando remove apenas os caminhos com commit no momento no repositório do Git.

O globbing de arquivos curinga corresponde entre os diretórios. É importante ter cuidado ao usar globs curingas. Considere os exemplos: directory/* e directory*. O primeiro exemplo vai remover todos os subarquivos de directory/, enquanto o segundo exemplo vai remover todos os diretórios irmãos, como directory1 directory2 directory_whatever, que pode ser um resultado inesperado.

O escopo do Git rm


O comando git rm opera apenas na ramificação atual. O evento de remoção é aplicado apenas às árvores do diretório de trabalho e do índice de staging. A remoção de arquivos não é persistente no histórico do repositório até que um novo commit seja criado.

Por que usar git rm em vez de rm


Um repositório do Git vai reconhecer quando um comando rm de shell regular for executado em um arquivo que está rastreando. Ele vai atualizar o diretório de trabalho para refletir a remoção. Ele não vai atualizar o índice de staging com a remoção. Outro comando git add vai precisar ser executado nos caminhos dos arquivos removidos para adicionar as mudanças ao índice de staging. O comando git rm age como um atalho uma vez que vai atualizar o diretório de trabalho e o índice de staging com a remoção.

Exemplos


git rm Documentation/\*.txt

Este exemplo usa um glob de arquivo curinga para remover todos os arquivos *.txt filhos do diretório da Documentação e quaisquer subdiretórios.

Observe que o asterisco * é escapado com barras neste exemplo; esta é uma proteção que evita que o shell expanda o curinga. O curinga, então, expande os nomes de caminho dos arquivos e subdiretórios sob o diretório Documentation/.

git rm -f git-*.sh

Este exemplo usa a opção force e é direcionada a todos os arquivos git-*.sh curingas. A opção force remove os arquivos de destino do diretório de trabalho e do índice de staging.

Como remover arquivos que não estão mais no sistema de arquivos


Conforme dito acima em "Por que usar git rm em vez de rm", o git rm é, na verdade, um comando simples que combina o shell rm padrão e o git add para remover um arquivo do diretório de trabalho e promover a remoção para o índice de staging. Um repositório pode ficar em um estado complicado caso diversos arquivos tenham sido removidos usando apenas o comando shell rm padrão.

Se a intenção é gravar todos os arquivos com remoção explícita como parte do próximo commit, o git commit -a vai adicionar todos os eventos de remoção ao índice de staging em preparação para o próximo commit.

No entanto, se a intenção for fazer a remoção persistente dos arquivos que foram removidos com o shell rm, use o comando a seguir:

git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

Este comando vai gerar uma lista dos arquivos removidos do diretório de trabalho e encaminhar esta lista por pipe para git rm --cached, que vai atualizar o índice de staging.

Resumo do Git rm


git rm é um comando que opera em duas das árvores de gerenciamento de estado interno do Git primário: o diretório de trabalho e o índice de staging. O git rm é usado para remover um arquivo de um repositório do git. É um método simples que combina o efeito do comando shell rm padrão com git add. Ou seja: ele primeiro vai remover um alvo do sistema de arquivos e depois vai adicionar o evento de remoção ao índice de staging. O comando é um dos muitos que podem ser usados para desfazer mudanças no Git.


Compartilhar este artigo

Leitura recomendada

Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.

Pessoas colaborando usando uma parede cheia de ferramentas

Blog do Bitbucket

Ilustração do DevOps

Caminho de aprendizagem de DevOps

Demonstrações de funções no Demo Den com parceiros da Atlassian

Como o Bitbucket Cloud funciona com o Atlassian Open DevOps

Inscreva-se para receber a newsletter de DevOps

Thank you for signing up