Por lo general, para descartar cambios en un archivo que haría:
git checkout -- <file>
¿Qué sucede si el cambio que deseo descartar es eliminar el archivo? La línea anterior daría un error:
error: pathspec '<file>' did not match any file(s) known to git.
¿Qué comando restaurará ese archivo único sin deshacer otros cambios?
punto extra: Además, ¿qué sucede si el cambio que deseo descartar es agregar un archivo? Quisiera saber cómo eliminar ese cambio también.
git
git-checkout
acechador
fuente
fuente
Respuestas:
Suponiendo que desea deshacer los efectos
git rm <file>
orm <file>
seguidos degit add -A
algo similar:Para deshacer
git add <file>
, la primera línea anterior es suficiente, suponiendo que aún no se haya comprometido.fuente
--
es la clave.git reset <file>
no funciona, que es lo que me trajo aquí.end-of-options-marker
requiere en el caso del archivo eliminado?git reset HEAD <file>
, lo que es equivalente), perogit reset
trata su primer argumento anteriorend-of-options-marker
como un nombre de referencia, no un nombre de archivo. ¿Podría escribirse un poco más flexible? Probablemente. ¿Por qué no lo fue? Probablemente solo los desarrolladores lo sepan con certeza.git reset filename
funciona bien para archivos no eliminados.git reset <file>
ygit reset -- <file>
? Me está costando encontrar una respuesta a eso en Google.Ambas preguntas se responden en
git status
.Para quitar la etapa agregando un nuevo archivo, use
git rm --cached filename.ext
Para eliminar la eliminación de un archivo, use
git reset HEAD filename.ext
Por otro lado,
git checkout --
nunca desarme, solo descarta los cambios no organizados.fuente
git status
citado; muestra a los usuarios una forma de autoayuda ahora y la próxima vez, y en caso de que se agregue o actualice información en futuras versiones de git.git reset
. Después delgit reset
, verá "Cambiado pero no actualizado", que significa "Cambios no organizados" en el idioma nativo de los autores de git, aparentemente. Más importante aún, todo el dogma sobre "el estado de git te dice todo lo que sabes" es una mentira. (Los gerentes que dicen que están perdiendo el tiempo de las personas y deberían ser despedidos)Las respuestas a sus dos preguntas están relacionadas. Comenzaré con el segundo:
Una vez que haya organizado un archivo (a menudo con
git add
, aunque algunos otros comandos implícitamente también organizan los cambiosgit rm
), puede retroceder ese cambio congit reset -- <file>
.En su caso, debe haber utilizado
git rm
para eliminar el archivo, lo que equivale a simplemente eliminarlorm
y luego organizar ese cambio. Si primero lo quitas del escenario,git reset -- <file>
puedes recuperarlo congit checkout -- <file>
.fuente
Si se ha organizado y confirmado, lo siguiente restablecerá el archivo:
Esto funcionará para una eliminación que ocurrió varias confirmaciones anteriores.
fuente
git revert COMMIT_HASH
A partir de git v2.23 , tienes otra opción:
git restore --staged -- <file>
fuente