Por que usar 'git rm' para remover um arquivo em vez de 'rm'?

171

No SVN, remover algo do sistema de arquivos diretamente (em vez de usar o svn) criou muitas dores de cabeça.

Eu não achei isso um problema ao usar git, mas percebo que o git tem sua própria rmimplementação ( git rm).

Qual é a diferença entre rme git rm?

cjm2671
fonte

Respostas:

253

Se você acabou de usar rm, precisará segui-lo git add <fileRemoved>. git rmfaz isso em uma etapa.

Você também pode usar o git rm --cachedque removerá o arquivo do índice (preparando-o para exclusão na próxima confirmação), mas mantenha sua cópia no sistema de arquivos local.

Andy
fonte
Boa resposta. Consegui usar git reset --harde, em seguida, fazer uma verificação geral do mestre para sair do estado principal desanexado porque sabia que não havia nenhuma alteração não confirmada. Se você não confirmou suas alterações, convém fazer um stash git, mas eu sou relativamente novo no git, portanto não conheço o comando exato. Se você veio aqui em ou após 2014, espero que esta resposta tenha sido útil para você.
Eric Hepperle - CodeSlayer2010
@ Andy - Se eu usei rm(em vez de git rm) e excluí muitos arquivos usando-o, e agora não quero gitrastreá-los. Existe uma maneira de reverter as mudanças? Quero gitpisar rmcomo removido porque não o usei git rmem primeiro lugar.
Chetan Arvind Patil
Seria bom se isso estivesse claramente explicitado nos documentos on-line (pode estar lá, mas obviamente não é óbvio ou essa pergunta não teria sido feita). Seria bom que os usuários soubessem que não estão fazendo nada errado se seguirem a rota do sistema operacional. E há razões para seguir a rota do sistema operacional. Por exemplo, se você precisar excluir um arquivo para testar se algo funciona antes de confirmar a alteração, a rota do sistema operacional é um pouco mais segura do que usar o git rm, pois no caso do git você precisa desestabilizar a ação, enquanto na opção do sistema operacional você apenas tem buscar (eu acredito).
bob
12

A remoção de arquivos usando rmnão é um problema em si, mas se você quiser confirmar que o arquivo foi removido, será necessário fazê-lo de git rmqualquer maneira, para que você possa fazê-lo dessa maneira imediatamente.

Além disso, dependendo do seu shell, git rmdepois de excluir o arquivo, você não terá o preenchimento de guias, portanto, será necessário especificar o caminho, enquanto se git rmo arquivo ainda existir, o preenchimento de guias funcionará normalmente.

hammar
fonte
7

git rmremoverá o arquivo do índice e do diretório de trabalho (somente índice se você tiver usado --cached) para que a exclusão seja preparada para a próxima confirmação.

manojlds
fonte
4

No entanto, se você acabar usando rm em vez de git rm. Você pode pular o git add e confirmar diretamente as alterações usando:

git commit -a

Struggler
fonte
3

Remova os arquivos do índice ou da árvore de trabalho e do índice. O git rm não removerá um arquivo apenas do seu diretório de trabalho.

Veja como você pode excluir um arquivo usando rm -fe removê-lo do seu índice comgit rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

No entanto, você pode fazer isso de uma só vez com apenas git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html
basicxman
fonte
2

Ao usar o git rm, a remoção fará parte do seu próximo commit. Então, se você quiser pressionar a alteração, use git rm

keis
fonte
2

Adicionando à resposta de Andy, há utilidade adicional para git rm:

  1. Segurança : Ao fazer isso em git rmvez de rm, o Git bloqueará a remoção se houver uma discrepância entre a HEADversão de um arquivo e o índice de preparação ou a versão da árvore de trabalho. Este bloco é um mecanismo de segurança para impedir a remoção de alterações em andamento.

  2. Salvaguardando : git rm --dry-run. Essa opção é uma salvaguarda que executará o git rmcomando, mas na verdade não excluirá os arquivos. Em vez disso, ele exibirá quais arquivos ele removeria.

Joe
fonte