Git: eliminar un archivo

A medida que su proyecto cambia con el tiempo, es probable que en algún momento necesite eliminar un archivo o un directorio completo del repositorio. Ya que esto implica más que...

A medida que su proyecto cambia con el tiempo, es probable que en algún momento necesite eliminar un archivo o un directorio completo del repositorio. Dado que esto implica más que cambiar el contenido de un archivo, Git tiene un comando especial para manejar la eliminación de archivos, que también toma algunas banderas importantes según su caso de uso.

En este breve artículo, veremos el comando git rm y cómo usarlo para eliminar archivos y directorios de su repositorio.

Eliminación de un archivo

El uso más simple de este comando es eliminar un solo archivo del repositorio, lo que puede hacer usando la siguiente sintaxis:

1
$ git rm <filename>

Digamos que tenemos un repositorio de Git con los siguientes contenidos:

1
2
3
4
5
6
$ git ls-files
.gitignore
index.js
lib/api.js
lib/db.js
package.json

Por alguna razón, supongamos que ya no necesitamos el archivo lib/db.js. Para eliminarlo de nuestro repositorio, ejecutaríamos lo siguiente:

1
2
$ git rm lib/db.js 
rm 'lib/db.js'

Ahora, enumerar nuestros archivos de repositorio nuevamente muestra que se eliminó:

1
2
3
4
5
$ git ls-files
.gitignore
index.js
lib/api.js
package.json

Sin embargo, no hemos terminado. Si ejecuta el comando status, notará que la eliminación del archivo aún está en preparación y debe confirmarse en el repositorio, al igual que cualquier otro cambio que realice.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    lib/db.js
$ git commit -m "Removed db.js file"
[master cf191e4] Removed db.js file
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 lib/db.js

Eliminación de varios archivos

Eliminar varios archivos de un repositorio es muy similar al caso de uso anterior de eliminar un solo archivo. Dependiendo de su método preferido, hay algunas maneras de hacer esto. Por ejemplo, simplemente puede enumerar explícitamente todos los archivos que se eliminarán:

1
2
3
$ git rm lib/db.js lib/api.js
rm 'lib/api.js'
rm 'lib/db.js'

O, si hay más archivos de los que desea enumerar, siempre puede usar el carácter comodín:

1
2
3
$ git rm lib/*.js
rm 'lib/api.js'
rm 'lib/db.js'

Tenga en cuenta que al eliminar todo el contenido del directorio lib, Git también eliminará el directorio real. Esto se hace porque Git solo rastrea archivos, no directorios:

1
2
3
4
$ git ls-files
.gitignore
index.js
package.json

Eliminación de un directorio

Para eliminar un directorio completo de su repositorio de Git, todo lo que necesita hacer es eliminar todos los archivos en ese directorio del repositorio. Esto se puede hacer utilizando uno de los métodos anteriores si no hay muchos archivos, pero en muchos casos esto sería demasiado engorroso. En este caso, la mejor opción sería eliminar recursivamente todos los archivos usando el indicador -r.

1
$ git rm -r <directory>

Para este ejemplo, trabajaremos a partir de nuestro ejemplo anterior y agregaremos algunos archivos más a nuestro directorio lib:

1
2
3
4
5
6
7
8
$ git ls-files
.gitignore
index.js
lib/apis/aws.js
lib/apis/github.js
lib/apis/stripe.js
lib/db.js
package.json

Aquí tenemos archivos y directorios anidados dentro de lib. Para eliminar todo el directorio lib del repositorio, podemos usar el indicador -r:

1
2
3
4
5
$ git rm -r lib
rm 'lib/apis/aws.js'
rm 'lib/apis/github.js'
rm 'lib/apis/stripe.js'
rm 'lib/db.js'

Tenga en cuenta que esto maneja la eliminación de todos los archivos bajo lib, e incluso lib/apis, ya que busca recursivamente en el directorio.

Y finalmente, no olvides confirmar tus cambios:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    lib/apis/aws.js
    deleted:    lib/apis/github.js
    deleted:    lib/apis/stripe.js
    deleted:    lib/db.js

$ git commit -am "Removed lib directory"
[master 53fc6af] Removed lib directory
 4 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 lib/apis/aws.js
 delete mode 100644 lib/apis/github.js
 delete mode 100644 lib/apis/stripe.js
 delete mode 100644 lib/db.js
Licensed under CC BY-NC-SA 4.0