Situación: tengo un repositorio 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 en el archivo?
git
version-control
staging
PHLAK
fuente
fuente
Respuestas:
Si entiendo la pregunta correctamente, simplemente desea "deshacer" lo
git add
que se hizo para ese archivo.Si necesita eliminar un solo archivo del área de preparación, use
git reset HEAD -- <file>
Si necesita eliminar un directorio (carpeta) completo del área de preparación, use
git reset HEAD -- <directoryName>
Sus modificaciones serán guardadas. Cuando ejecute
git status
el archivo, una vez más aparecerá como modificado pero aún no preparado.Vea la
git reset
página del manual para más detalles.fuente
git rm --cached FILE
como sugiere otra respuesta.,
fuente
git reset
creo que es mejor usarlo aquí, ya que puede omitir la opción --chached y ponerse triste rápidamente usando elgit rm
comando :-) Congit reset
el lado seguro, si olvida agregar "alguna opción" mantenga el cambio para que sea "más seguro" para el uso diario (estoy hablandogit reset --hard
).git rm --cached FILE
elimina el archivo por etapas, sin eliminar el archivo del árbol de trabajo. Esto es diferente a la pregunta, que era sobre deshacergit add
.git rm --cached
hará que el archivo se elimine del índice, es decir, el archivo se convertirá en un archivo sin seguimiento . No creo que esto sea lo que OP quiere. Consulte un hilo relacionado aquí: stackoverflow.com/questions/45047810/…git reset <file>
Funciona si tienes o no confirmaciones anteriores.
fuente
Entonces, un pequeño ajuste a la respuesta de Tim Henigan: debe usar antes del nombre del archivo. Se vería así:
fuente
--
y por qué agregarlo? Lo hicegit reset HEAD <file>
y funcionó.--
Es una especie de divisor. En caso de que el nombre del archivo no sea convencional, por ejemplo, (-f
omaster
) git lo interpretaría como argumento de línea de comando o nombre de rama en lugar de nombre de archivo. Mira aquíSi tiene una modificación en filename.txt, lo agregó a la etapa por error y desea eliminar el archivo de la preparación pero no desea perder los cambios.
fuente
En caso de que solo desee eliminar un subconjunto de los cambios en su archivo, puede usar:
o
Este comando es básicamente el reverso de
git add -p
: solo eliminará los cambios seleccionados del área de preparación. Me resulta extremadamente útil para "agregar" algo que agregué por error.fuente
Si desea eliminar archivos que siguen un cierto patrón y lo está usando
git rm --cached
, también puede usar patrones de archivo glob.Ver aquí .
fuente
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í
y la solución es
o
fuente
Cuando lo haces
git status
, Git te dice cómo quitar el escenario:Así que
git reset HEAD <file>
funcionó para mí y los cambios no fueron tocados.fuente
Creo que probablemente te confundiste con el concepto de índice , como comentó @CB Bailey:
Simplemente puede considerar el directorio provisional y el índice como la misma cosa.
Entonces, al igual que la respuesta de @Tim Henigan , supongo:
Aquí está mi respuesta:
Comúnmente, hay dos formas de deshacer una operación de escenario , como otras respuestas ya mencionadas:
y
Pero, ¿cuál es la diferencia?
Suponga que el archivo se ha preparado y existe también en el directorio de trabajo , úselo
git rm --cached <file>
si desea eliminarlo del directorio de ensayo y mantenga el archivo en el directorio de trabajo . Pero tenga en cuenta que esta operación no solo eliminará el archivo del directorio de ensayo sino que también lo marcará comodeleted
en el directorio de ensayo , si utilizadespués de esta operación, verá esto:
Es un registro de eliminar el archivo del directorio provisional . Si no desea mantener ese registro y simplemente desea deshacer la operación de un archivo en la etapa anterior, use
git reset HEAD <file>
en lugar.-------- FIN DE LA RESPUESTA --------
PD: He notado algunas respuestas mencionadas:
git checkout -- <file>
Este comando es para la situación en la que el archivo se ha preparado , pero el archivo se ha modificado en el directorio de trabajo después de que se haya preparado, utilice esta operación para restaurar el archivo en el directorio de trabajo desde el directorio de ensayo . En otras palabras, después de esta operación, los cambios suceden en su directorio de trabajo , NO en su directorio de ensayo .
fuente
Después de la versión
2.23
, Git ha introducido elgit restore
comando que puede usar para hacer eso. Citando la documentación oficial:Por lo tanto, puede invocar
git restore --staged <path>
y desestabilizar el archivo, pero también conservar los cambios que realizó. Recuerde que si el archivo no se organizó, perderá todos los cambios que haya realizado.fuente
Para versiones más nuevas de Git hay
git restore --staged <file>
.Cuando hago una
git status
versión con Git2.26.2.windows.1
, también se recomienda para desestabilizar:( Esta publicación muestra que en versiones anteriores
git reset HEAD
se recomendaba en este momento)Puedo recomendar este post explicando las diferencias entre
git revert
,git restore
ygit reset
así como parámetros adicionales paragit restore
.fuente
Si realiza cambios en muchos archivos rastreados pero solo desea organizar algunos de ellos, realice un
git add .
no siempre es favorable (o recomendado), ya que organiza todos los archivos rastreados (algunos casos en los que desea conservar los cambios solo para usted y no desea organizarlos 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 (que es el caso en la mayoría de los proyectos), se vuelve molesto
Ahí es cuando Git GUI es útil (probablemente solo el tiempo que lo uso). Simplemente abra la GUI de Git, muestra secciones de archivos con y sin etapas. Seleccione los archivos de la sección por etapas que desea quitar del escenario y presione
para sacarlos del escenario.
fuente
Mi muestra:
Como puedes notar
fuente
Debe estar en el directorio del archivo y luego escribir lo siguiente en el terminal
Se supone que solo debe restablecer un archivo.
fuente
Para destrabar todo de una vez, ejecuta este comando
fuente
git checkout -- <file>
Funciona perfectamente para eliminar archivos del área de ensayo
fuente
En mi caso, lo hago
fuente