Saltar al contenido

git clean

gitclean

Descripción

El comando git clean se usa para eliminar archivos no rastreados del directorio de trabajo. A diferencia de git reset y git checkout, que operan sobre archivos rastreados o preparados, git clean se dirige específicamente a archivos que aún no se han agregado al índice de Git. Los archivos no rastreados son aquellos creados dentro del directorio de trabajo, pero que todavía no están bajo seguimiento. El siguiente ejemplo muestra la diferencia entre archivos rastreados y no rastreados:

git clean

bash
mkdir test_directory
cd test_directory/
git init .
#Initialized empty Git repository in /Users/kev/code/test_directory/.git/
echo "tracked file" > ./test_tracked_file
git add ./test_tracked_file
echo "untracked" > ./test_untracked_file
mkdir ./test_untracked_dir && touch ./test_untracked_dir/file
git status
#On branch master
#No commits yet
#Changes to be committed:
       # (use "git rm --cached <file>..." to unstage)
                 #new file: test_tracked_file
#Untracked files:
        # (use "git add <file>..." to include in what will be committed) 
                 #test_untracked_dir/ 
                 #test_untracked_file

Como resultado del ejemplo anterior, tendrás un nuevo repositorio Git en el directorio test_directory, que contiene un test_tracked_file agregado al índice de Git. Además, se crea un test_untracked_file, junto con un test_untracked_dir. Luego, el ejemplo llama a git status, que muestra la salida con el estado interno de los cambios rastreados y no rastreados. Después se usa el comando git clean para eliminar estos archivos no rastreados.

No ejecutes git clean todavía. El siguiente ejemplo demuestra el error que produce por defecto. Git requiere una opción de forzado para ejecutar git clean y evitar la pérdida accidental de datos. Una vez ejecutado, no puedes deshacer git clean. Realiza una eliminación dura del sistema de archivos. Debes asegurarte de que realmente quieres borrar los archivos no rastreados antes de ejecutarlo.

git clean error

bash
git clean
#fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean

Opciones comunes y uso

El comando git clean tiene varios usos con diferentes opciones.

git clean -n

bash
git clean -n

La opción -n realiza una ejecución en seco de git clean. Muestra los archivos que se van a eliminar, pero no los elimina.

git clean -n example

bash
git clean -n
#Would remove test_untracked_file

Como puedes ver, indica que test_untracked_file se eliminará cuando se ejecute el comando git clean.

git clean -f

bash
git clean -f or --force

La opción --force es obligatoria a menos que la opción de configuración clean.requireForce esté establecida en false. Elimina los archivos no rastreados del directorio actual, excepto las carpetas o archivos no rastreados especificados con .gitignore.

git clean --force

bash
git clean -f
#Removing test_untracked_file

La salida muestra que test_untracked_file ha sido eliminado. En este punto, git status mostrará que test_untracked_file ha sido eliminado y no se puede encontrar. De forma predeterminada, git clean -f actuará sobre todos los archivos no rastreados dentro del directorio actual. Además, se puede pasar un valor <path> con la opción -f para eliminar un archivo específico.

Si quieres eliminar cualquier directorio no rastreado, puedes usar la opción -d, que indica a git clean que lo haga, ya que por defecto ignorará los directorios.

git clean -f <path>

bash
git clean -f <path>

También puedes usar la combinación -dn.

git clean -dn

bash
git clean -dn
#Would remove test_untracked_dir/
git clean -df
#Removing test_untracked_dir/

Primero muestra que test_untracked_file está listo para ser eliminado. Luego ejecutamos una limpieza forzada y recibimos la salida de que test_untracked_dir se ha eliminado.

git clean -x

bash
git clean -x

La opción -x indica a git clean que también incluya los archivos ignorados. Debes ejecutar primero una “ejecución en seco”, antes de la eliminación final. La opción -x actuará sobre todos los archivos ignorados. Esto podría incluir cosas no deseadas, como archivos de configuración del IDE ./.idea.

git clean -xf

bash
git clean -xf

La opción -x puede pasarse y combinarse con otras opciones. El ejemplo anterior es una combinación con -f que eliminará los archivos no rastreados del directorio actual, así como cualquier archivo que Git normalmente ignore.

Modo interactivo

El comando git clean tiene un modo interactivo que se activa pasando la opción -i. En el ejemplo siguiente también usamos la opción -d, para actuar sobre test_untracked_dir. Después de activar el modo interactivo, mostrará un prompt What now>. Este prompt pedirá seleccionar un comando para aplicar a los archivos no rastreados. Estos comandos son 6.

git clean -di

bash
git clean -di
Would remove the following items:
test_untracked_dir/ test_untracked_file
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help
What now>

Vamos a revisar cada comando a continuación.

  1. El comando 6 explicará los demás comandos.

git clean steps

bash
What now> 6
clean - start cleaning
filter by pattern - exclude items from deletion
select by numbers - select items to be deleted by numbers
ask each - confirm each deletion (like "rm -i")
quit - stop cleaning
help - this screen
? - help for prompt selection
  1. El comando 1 eliminará los elementos mencionados.

git clean step 1, clean

bash
git clean -di
What now> 1
clean
  1. Seleccionar el comando 2 mostrará un prompt adicional para filtrar la lista de archivos no rastreados.

git clean filter by pattern

bash
git clean -di
What now> 2

Después de elegir el comando 2, necesitaremos el patrón comodín *_file, que restringirá la lista de archivos no rastreados a test_untracked_dir.

git clean steps

bash
Would remove the following items:
test_untracked_dir/ test_untracked_file
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help
What now> 2
test_untracked_dir/ test_untracked_file
Input ignore patterns>> *_file
test_untracked_dir/
  1. Al igual que el comando 2, el comando 3 sirve para refinar la lista de nombres de archivos no rastreados. Seleccionar este comando pedirá números que coincidan con un nombre de archivo no rastreado.

git clean select by numbers

bash
git clean -di
What now> 3
  1. El comando 4 se ejecutará sobre cada archivo no rastreado y mostrará un prompt Y/N para confirmar la eliminación.

git clean ask each

bash
git clean -di
What now> 4
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help
What now> 4
Remove test_untracked_dir/ [y/N]? N
Remove test_untracked_file [y/N]? N
  1. Seleccionar el comando 5 cerrará la sesión interactiva.

git clean quit

bash
git clean -di
What now> 5

Práctica

¿Cuáles son las funcionalidades y opciones del comando 'git clean'?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.