Supongamos que he realizado algunos cambios en el directorio de trabajo y marqué accidentalmente varios archivos (que incluyen algunos de los modificados) para su eliminación. ¿Cómo elimino la marca de los archivos para eliminarlos sin perder los cambios que hice?Deshacer una acción de eliminación en Mercurial
Respuesta
hg revert
Estoy bastante seguro de Mercurial incluso hace copias de seguridad de los cambios de forma predeterminada.
hay dos opciones: utilizando hg revert
hg revert -a
que volver a la revisión anterior y poner todos los cambios en los archivos nuevos con .orig añadirá a los nombres
hg volver [nombres de los archivos a unremove] simplemente invertir esos archivos
que probablemente iría con este último
Ok, estoy consciente de revertir. Como utilicé "hg remove -Af" (es decir, eliminé los archivos del repositorio en el siguiente compromiso y no desde el disco), estaba buscando una solución que simplemente desmarque los archivos para que permanezcan en el repositorio. "hg revertir" también los reemplazará con versiones anteriores. Esperaba que hubiera una forma similar a "hg add"/"hg forget". "hg forget" solo quita la marca de los archivos marcados para sumar en el siguiente commit. – Kostas
AFAIK revertir es su única opción para deshacer la eliminación. Sin duda, la ayuda para eliminar dice volver a ver para eliminar cosas (mientras que, como dices, agregar sugiere olvidar como un opuesto). deberías obtener .orig archivos con tus cambios en –
En serio. Solo quiero que deje caer la marca "eliminar" de algunos archivos que accidentalmente "olvidé". NO QUIERO MIS ARCHIVOS MODIFICADOS. Si accidentalmente agrego hg, hg olvide deshacerte. Lo opuesto no es verdad. Si olvidé un archivo, ninguna cantidad de hg adding lo desmarcará. BOOOOOOO TERRIBLE UX. –
Después de tu comentario a jk, marqué hg forget
. Parece ser solo un atajo para hg remove -Af
, lo que significa que este es el verdadero opuesto al hg add
.
Después de eso, si ha usado hg remove -Af
, entonces debería poder revertirlo usando hg add
(lo probé y parece que funciona).
Los marcadores se almacenan en el archivo .hg/dirstate. Todo lo que necesita hacer para obtener uno antes de emitir hg remove -Af
. Puede verse así (no probado):
hg clone bad-repo orig-repo
cp orig-repo/.hg/dirstate bad-repo/.hg/dirstate
cd bad-repo
hg status
El último comando debe mostrar el estado antes de eliminar los archivos.
Solo hg add
los archivos.
No sé por qué está recibiendo algunas respuestas que modifican el directorio de trabajo. Si ha marcado accidentalmente algunos archivos para eliminarlos, puede deshacerlos con Agregar.
[email protected]:~/hgtest$ hg status --all
M another_file
C a_file
[email protected]:~/hgtest$ hg remove --after --force *
[email protected]:~/hgtest$ hg status --all
R a_file
R another_file
[email protected]:~/hgtest$ hg add *
[email protected]:~/hgtest$ hg status --all
M another_file
C a_file
Dicho esto, no utilice --force
con hg remove
o alguna vez realmente. También trato de adquirir el hábito de usar hg forget
en lugar de hg remove --after
,
Bastante seguro de que esta es la respuesta correcta, y necesita más votos ascendentes para llegar a la cima. – slim
Advertencia: Al hacer 'hg eliminar [archivo]' en un archivo sin modificar, se elimina el archivo del sistema de archivos. En este caso, 'hg add [file]' falla y para volver a agregarlo debe hacer 'hg revert [file]'. 'hg add [file]' es la respuesta correcta para los archivos que se han modificado antes de la eliminación. – dinosaur
Es cierto. Es por eso que 'hg forget' es siempre una mejor opción. Deje la eliminación en buena 'vieja '(no mercurial)' rm'. –
Tuve exactamente el mismo problema. hg add
es el inverso a hg forget
(al igual que sucede lo contrario). Sin embargo, intentar volver a agregar el directorio no funcionó. En cambio, tuve que usar hg add
en cada archivo:
hg st | egrep "^R" | sed -e "s/R //" | xargs hg add
Espero que ayude. Tenga en cuenta que en mi caso, no había nada que legítimamente quisiera eliminar. Si tiene archivos que definitivamente desea eliminar, ajuste el grep en consecuencia.
Si el archivo existe, (si es probable que haya marcado para realizar una extracción con hg forget
o Si modificó entonces hg remove
d ella), hacer hg add [file]
para agregarlo atrás con los cambios realizados después de la última confirmación y antes olvidando el archivo.
Si el archivo no existe (probablemente si el archivo no se modificó y ha marcado el archivo para eliminarlo usando hg remove
), realice hg revert [file]
para revertirlo a su estado en el elemento primario del directorio de trabajo.
Esta respuesta es mucho mejor que la más votada, ya que explica por qué y cuándo funciona cada comando en lugar de solo dar una receta. –
- 1. Deshacer una acción de mover/cambiar el nombre en mercurial?
- 2. Mercurial Deshacer fusionar
- 3. Deshacer un empuje Mercurial
- 4. Deshacer la eliminación SVN ./* --force
- 5. Mercurial deshacer tres hg push
- 6. ¿Deshacer el último addremove en Mercurial?
- 7. Cómo deshacer la eliminación de archivos intermedios
- 8. Mercurial: ¿Cómo se pueden deshacer los cambios?
- 9. ¿Cómo puedo deshacer mi último comando de eliminación en mysql?
- 10. cómo deshacer la eliminación de un archivo en SVN
- 11. Deshacer la eliminación de métodos en Squeak Smalltalk
- 12. ¿Se puede deshacer un `range.insertNode` usando la acción de deshacer del navegador, en un div satisfactorio?
- 13. Deshabilitar deshacer para la creación/eliminación de NSManagedObject
- 14. Deshacer
- 15. ¿Hay alguna manera de cambiar la acción de eliminación en una instancia existente de shared_ptr?
- 16. ¿Cómo abortar una fusión en mercurial?
- 17. Deshacer una confirmación en TortoiseSVN
- 18. Deshacer una comprometerse en TortoiseSVN
- 19. Deshacer una mala extracción
- 20. Deshacer en Subversion
- 21. Cómo deshacer un estado -R (marcados para su eliminación) en SVN
- 22. Deshacer implementación - DOM manipulaciones
- 23. Git: Cómo "deshacer" una fusión
- 24. Desinstalar Mercurial en una Mac
- 25. TortoiseSVN - Cómo deshacer una reversión
- 26. ¿Es posible deshacer una importación en subversión?
- 27. Implementando deshacer en una aplicación web
- 28. ¿Cómo puedo deshacer una sesión en ScalaQuery?
- 29. Deshacer convertToCapped a una colección
- 30. Encontrar conjuntos de cambios en mercurial mediante la eliminación del parche
sí, a menos que diga que no, los cambios se ponen en .orig archivos –
Acabo de ejecutar 'hg revert' en un archivo que eliminé indirectamente con' hg mv'. No lo hizo ** NO ** almacenó mis cambios, y volvió a la copia del último commit. – cesar
esta es _no_ la respuesta correcta. Revertir altera el funcionamiento del directorio y esta pregunta es sobre cómo deshacer una "marca para eliminar" –