repositorio - deshacer commit git
¿Cómo elimino un solo archivo del área de preparación de Git pero no lo elimino del índice o deshago los cambios en el archivo? (14)
Situación: tengo un repositorio de Git con archivos que ya están en el índice. Realizo cambios en varios archivos, abro Git y agrego estos archivos a mi área de preparación con "git add".
Pregunta: ¿Cómo elimino uno de esos archivos del área de preparación pero no lo elimino del índice o deshago los cambios realizados en el archivo?
Cuando haces el git status
, Git te dice cómo deshacer el escenario:
Changes to be committed: (use "git reset HEAD <file>..." to unstage).
Así que git reset HEAD <file>
funcionó para mí y los cambios no fueron tocados.
Debe estar en el directorio del archivo y luego escribir lo siguiente en el terminal
git reset HEAD .
El supuesto es que necesita restablecer un solo archivo.
En caso de que solo quiera eliminar un subconjunto de los cambios en su archivo, puede usar:
git reset -p
o
git reset -p <file_name>
Este comando es básicamente lo contrario de git add -p
: solo eliminará los cambios seleccionados del área de preparación. Me parece extremadamente útil para "agregar" algo que agregué por error.
En mi caso, lo hago.
git checkout -- FILE
Para desarticular todo a la vez, ejecute este comando.
git reset HEAD -- .
Por lo tanto, un pequeño ajuste a la respuesta de Tim Henigan: debe usar - antes del nombre del archivo. Se vería así:
git reset HEAD -- <file>
Si desea eliminar archivos siguiendo un patrón determinado y está utilizando git rm --cached
, también puede usar patrones de archivo-glob.
Ver here
Si realiza cambios en muchos archivos rastreados pero solo desea poner en escena algunos de ellos, realice una
git add .
no siempre es favorable (o recomendado), ya que escalona todos los archivos rastreados (algunos casos en los que desea mantener los cambios solo para usted y no quiere colocarlos en el repositorio remoto).
ni es ideal hacer un montón de
git add path/to/file1 path/to/file2
Si tiene muchos directorios anidados (como es el caso en la mayoría de los proyectos), se vuelve molesto
Ahí es cuando Git GUI es útil (probablemente solo la vez que lo uso). Simplemente abra la GUI de Git, se muestran secciones de archivos en etapas y sin etapas. Seleccione los archivos de la sección preparada que desea eliminar y presione
Ctrl+U
(para ventanas)
para desmarcarlos.
Usted quiere:
Afectar a un solo archivo
Eliminar archivo del área de preparación
No eliminar un solo archivo del índice
No deshagas el cambio en sí mismo.
y la solución es
git reset HEAD file_name.ext
o
git reset HEAD path/to/file/file_name.ext
git checkout -- <file>
Funciona perfectamente para eliminar archivos del área de ensayo
git reset <file>
Funciona si tienes o no alguna confirmación previa.
Si entiendo la pregunta correctamente, simplemente desea "deshacer" el git add
que se realizó para ese archivo.
Si necesita eliminar un solo archivo del área de preparación, utilice
git reset HEAD -- <file>
Si necesita eliminar un directorio completo (carpeta) del área de preparación, use
git reset HEAD -- <directoryName>
Sus modificaciones se mantendrán. Cuando ejecute el git status
el archivo volverá a aparecer como modificado, pero aún no está en escena.
Vea la página del manual de git reset
para más detalles.
git reset filename.txt
Si tiene una modificación en filename.txt, la agregó a la etapa por error y desea eliminar el archivo de la puesta en escena, pero no quiere perder los cambios.
git rm --cached FILE
,
git rm -r --cached CVS */CVS