2011-07-11 14 views
6

Hice un hg mv -A oldFile newFile y accidentalmente recibí el nuevo archivo.Deshacer una acción de mover/cambiar el nombre en mercurial?

Hice un hg revert newFile pero ahora el archivo que se mostró como perdido (y luego como eliminado después del comando de mover) ahora ya no se muestra.

¿Cómo puedo deshacer eso y volver al estado en el que estaba, para que el nuevo archivo se muestre como desconocido y el archivo anterior aparezca como perdido?

Respuesta

7
$ hg st 
$ mv a b 
$ hg st 
! a 
? b 
$ hg mv -A a b 
$ hg st 
A b 
R a 
$ hg revert b 
$ hg st 
? b 
$ ls 
a b 

Así hg revert b restaurado el antiguo archivo a. Ahora todo lo que tiene que hacer es hg mv a correct-name.

+0

gracias! no creía que hubiera revertido la eliminación del antiguo archivo también. –

+0

Como se muestra el último 'ls', el archivo llamado" b "todavía existe, por lo que la pregunta original no se ha respondido completamente. Usando la técnica ilustrada aquí, el archivo "b" debería eliminarse manualmente. Por supuesto, en el escenario dado, si el 'mv a b' original había chocado b, ese b se ha ido. Razón de más para usar 'hg mv' en su lugar. – peak

0

Aquí hay un script "unmove" escrito en bash. Hay un texto de ayuda en la parte superior. El punto más importante es que el script tiene una opción que obliga a que la eliminación de archivos se realice de forma interactiva.

#!/bin/bash 

# Syntax: $0 [OPTION] DEST 
# 
# This script is mainly intended to undo the effects of: hg move SOURCE DEST 
# 
# It first determines which files have been added globally (as if by 
# hg add), then it runs: 

# hg -v revert DEST 

# Finally, it removes all the files that had been added, 
# and then reverts them as well if possible. 
# 
# OPTIONS: 
# -i :: remove files using rm -i 

if [ "$1" = -i ] ; then 
    INTERACT=$1 
    shift 
fi 


TODO=() 
while read -r f ; do 
    TODO+=("$f") 
done < <(hg st -an "[email protected]") 

function go { 
    hg -v revert "[email protected]" 
    for f in "${TODO[@]}" ; do 
     rm $INTERACT "$f" 
     hg -q files "$f" > /dev/null && hg revert "$f" 
    done 
} 

go 
Cuestiones relacionadas