2011-07-11 8 views
6

私はhg mv -A oldFile newFileを実行し、間違って新しいファイルを間違って取得しました。水銀で移動/名前変更アクションを元に戻しますか?

私はhg revert newFileを実行しましたが、行方不明と表示されたファイルは、現在は表示されなくなりました。

どうすれば元の状態に戻り、新しいファイルが不明と表示され、古いファイルが不足していると表示されるのですか?

答えて

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 

のでhg revert bは古いファイルaを回復しました。今あなたがしなければならないのはhg mv a correct-nameです。

+0

ありがとうございました!古いファイルの削除を元に戻したとは思わなかった。 –

+0

最後の 'ls'が示すように、" b "という名前のファイルがまだ存在するので、元の質問は完全には答えられていません。ここに示す手法を使用すると、ファイル "b"を手動で削除する必要があります。もちろん、与えられたシナリオでは、元の 'mv a b'がbを覆っていたら、それはなくなっています。なぜなら、代わりに 'hg mv'を使う理由があります。 – peak

0

ここには、bashで書かれた "unmove"スクリプトがあります。上部にヘルプテキストがあります。最も重要な点は、このスクリプトには、ファイルの削除を対話的に行わせるオプションがあることです。

#!/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 
関連する問題