¿Te refieres a "restablecer lo que había antes" o "eliminar, porque ya no quiero ese archivo"?
Andrew Aylett
En mi caso, es lo mismo porque el archivo no existía antes ...
hcs42
Respuestas:
505
Usted quiere:
git rm --cached [file]
Si omite la --cachedopción, también la eliminará del árbol de trabajo. git rmes un poco más seguro que git reset, porque se le advertirá si el contenido en escena no coincide con la punta de la rama o el archivo en el disco. (Si no es así, debe agregarlo --force).
Esto también funciona muy bien, por ejemplo, si accidentalmente registró algunos intermedios de compilación o archivos de configuración locales que no llegaron a su .gitignore; use git rm --cachedpara eliminarlos del repositorio, agregue los archivos o directorios relevantes a .gitignore, organice y confirme normalmente. Se habrán ido del repositorio pero permanecerán intactos en su árbol local, y no los volverá a registrar accidentalmente.
Ionoclast Brigham
22
Esto también elimina el archivo del repositorio (remoto) después de confirmar y presionar.
powder366
66
Esto no lo elimina del índice, sino que lo marca como eliminado en el índice.
JotaBe
44
Es muy probable que esta respuesta sea incorrecta, ya que elimina un archivo del repositorio (como ya se ha mencionado en @ powder366) que no es el resultado previsto.
otomo
1
Esta solución no me funcionó. Marcó el archivo especificado como eliminado y luego lo elimina del repositorio local.
paiego
134
Esto debería mostrar un <archivo> para usted (sin eliminar o modificar el archivo):
Dependiendo de su flujo de trabajo, este puede ser el tipo de cosas que rara vez necesita lo suficiente como para que tenga poco sentido tratar de encontrar una solución de línea de comandos (a menos que esté trabajando sin una interfaz gráfica por alguna razón).
Simplemente use una de las herramientas basadas en GUI que admiten la administración de índices, por ejemplo:
git gui <- utiliza el marco de ventanas Tk - estilo similar a gitk
git cola <- una interfaz GUI más moderna
Estos le permiten mover archivos dentro y fuera del índice con solo apuntar y hacer clic. Incluso tienen soporte para seleccionar y mover partes de un archivo (cambios individuales) hacia y desde el índice.
¿Qué tal una perspectiva diferente? Si te equivocas mientras usas uno de los comandos sugeridos, más bien crípticos:
git rm --cached [file]
git reset HEAD <file>
... tiene una posibilidad real de perder datos, o al menos hacer que sea difícil de encontrar. A menos que realmente necesite hacer esto con una frecuencia muy alta, es probable que usar una herramienta GUI sea más seguro .
Trabajando sin el índice
Según los comentarios y votos, me he dado cuenta de que mucha gente usa el índice todo el tiempo. Yo no. Así es cómo:
Confirmar mi copia de trabajo completa (el caso típico): git commit -a
Confirmar solo unos pocos archivos: git commit (list of files)
Comprometerse todos, pero algunos archivos modificados: git commit -aa continuación, modificar a travésgit gui
Revise gráficamente todos los cambios en la copia de trabajo: git difftool --dir-diff --tool=meld
@ Martin: Creo que depende de tu flujo de trabajo. En mi enfoque, nunca uso el índice directamente. Cuando quiero guardar mi trabajo, solo hago compromisos completos con git commit -a. Cuando estaba respondiendo a esta pregunta, fue porque había hecho (una exótica) " selección inversa de cereza " que pone los archivos en el índice para usted, pero quería editar un archivo antes de comprometerme. Saqué el archivo del índice mientras lo editaba para que las diferencias funcionen de la manera en que estoy acostumbrado.
nobar
mi caso de uso era muy estrecho e inútil de hecho: crear una rama; agregue carpeta llena de archivos solo para rama; cambiar a maestro; unir; ops, se agregó una carpeta incorrecta al maestro, se agregó a gitignore; los archivos no se eliminarían de commit - grant, una mejor solución sería usarlo de rminmediato, pero primero pensé que cambiar las ramas no eliminaría la carpeta ignorada . pero ... utilizo la herramienta "gui" de github que es lo suficientemente buena para mí y sí soporto algo de gestión de índices, excepto que no es compatible con esto. Entonces, ¿qué debo usar 2 gui para un uso limitado? Todavía no puedo estar de acuerdo con la respuesta.
cregox
3
Esta es una respuesta decididamente impopular. Sin embargo, estoy bastante seguro de que el enfoque que sugiero es el adecuado para algunas personas (incluido yo mismo). Utilizo una de estas herramientas para manipular el índice varias veces al año.
nobar
1
Hoy en día, es probable que los editores de programación y los IDE admitan la manipulación de índices gráficos. Al menos el átomo de GitHub lo hace.
nobar
1
Prefiero una interfaz CLI sobre GUI cualquier día, aunque es más peligroso. Me permitirá usar git incluso sin la interfaz gráfica de usuario, lo que me parece reconfortante (en lugar de perderme cuando no puedo instalar tales herramientas en un servidor remoto, por ejemplo). Todo lo que dijo esta respuesta es perfectamente válido y no merece votos negativos "cli elitistas", ¡+1 por proporcionar una buena alternativa gui!
Respuestas:
Usted quiere:
Si omite la
--cached
opción, también la eliminará del árbol de trabajo.git rm
es un poco más seguro quegit reset
, porque se le advertirá si el contenido en escena no coincide con la punta de la rama o el archivo en el disco. (Si no es así, debe agregarlo--force
).fuente
git rm --cached
para eliminarlos del repositorio, agregue los archivos o directorios relevantes a .gitignore, organice y confirme normalmente. Se habrán ido del repositorio pero permanecerán intactos en su árbol local, y no los volverá a registrar accidentalmente.Esto debería mostrar un <archivo> para usted (sin eliminar o modificar el archivo):
fuente
HEAD
.HEAD
!para eliminar un archivo particular del índice.
y
git reset HEAD
para eliminar todos los archivos indexados.
fuente
Dependiendo de su flujo de trabajo, este puede ser el tipo de cosas que rara vez necesita lo suficiente como para que tenga poco sentido tratar de encontrar una solución de línea de comandos (a menos que esté trabajando sin una interfaz gráfica por alguna razón).
Simplemente use una de las herramientas basadas en GUI que admiten la administración de índices, por ejemplo:
git gui
<- utiliza el marco de ventanas Tk - estilo similar agitk
git cola
<- una interfaz GUI más modernaEstos le permiten mover archivos dentro y fuera del índice con solo apuntar y hacer clic. Incluso tienen soporte para seleccionar y mover partes de un archivo (cambios individuales) hacia y desde el índice.
¿Qué tal una perspectiva diferente? Si te equivocas mientras usas uno de los comandos sugeridos, más bien crípticos:
git rm --cached [file]
git reset HEAD <file>
... tiene una posibilidad real de perder datos, o al menos hacer que sea difícil de encontrar. A menos que realmente necesite hacer esto con una frecuencia muy alta, es probable que usar una herramienta GUI sea más seguro .
Trabajando sin el índice
Según los comentarios y votos, me he dado cuenta de que mucha gente usa el índice todo el tiempo. Yo no. Así es cómo:
git commit -a
git commit (list of files)
git commit -a
a continuación, modificar a travésgit gui
git difftool --dir-diff --tool=meld
fuente
git commit -a
. Cuando estaba respondiendo a esta pregunta, fue porque había hecho (una exótica) " selección inversa de cereza " que pone los archivos en el índice para usted, pero quería editar un archivo antes de comprometerme. Saqué el archivo del índice mientras lo editaba para que las diferencias funcionen de la manera en que estoy acostumbrado.rm
inmediato, pero primero pensé que cambiar las ramas no eliminaría la carpeta ignorada . pero ... utilizo la herramienta "gui" de github que es lo suficientemente buena para mí y sí soporto algo de gestión de índices, excepto que no es compatible con esto. Entonces, ¿qué debo usar 2 gui para un uso limitado? Todavía no puedo estar de acuerdo con la respuesta.