¿Cómo eliminar un file del índice en git?

¿Cómo eliminar un file del índice (= área de preparación = caching) sin eliminarlo del sistema de files?

Usted quiere:

git rm --cached [file] 

Si omite la opción --cached , también la eliminará del tree de trabajo. git rm es un poco más seguro que el git reset , porque se te advertirá si el contenido por etapas no coincide con la punta de la twig o el file en el disco. (Si no es así, debe agregar --force ).

Esto debería borrar un <file> por usted (sin eliminar o modificar el file):

 git reset HEAD <file> 

Dependiendo de su flujo de trabajo, este puede ser el tipo de cosas que necesita con la suficiente frecuencia para que no tenga sentido tratar de encontrar una solución de command-line (a less que esté trabajando sin una interfaz gráfica por algún motivo).

Solo use una de las herramientas basadas en GUI que soportan la administración de índices, por ejemplo:

  • git gui <- usa el marco de windows Tk – estilo similar a gitk
  • git queue <- una interfaz GUI de estilo más moderno

Estos le permiten mover files dentro y fuera del índice con solo apuntar y hacer clic. Incluso tienen soporte para seleccionar y mover partes de un file (cambios individuales) hacia y desde el índice.


¿Qué tal una perspectiva diferente? Si te equivocas al usar uno de los commands sugeridos, más bien crípticos:

  • git rm --cached [file]
  • git reset HEAD <file>

… tiene una posibilidad real de perder datos o, al less, dificultar su búsqueda. A less que realmente necesite hacer esto con una frecuencia muy alta, es probable que usar una herramienta de GUI sea más seguro .


Trabajando sin el índice

En base a los comentarios y las votaciones, me he dado count de que muchas personas usan el índice todo el time. Yo no. Así es cómo:

  • Confirmar mi copy de trabajo completa (el caso típico): git commit -a
  • Confirme solo algunos files: git commit (list of files)
  • Confirme todos less algunos files modificados: git commit -a luego modifique mediante git gui
  • Revise gráficamente todos los cambios en la copy de trabajo: git difftool --dir-diff --tool=meld