2013-04-17 64 views
9

hg qnewには、パッチに未解決な変更が含まれていることを認識せずに発行されました。私はそれを取り返し、特定の変更のみをhg qrecordを使って選択したいと思います。 qnewを元に戻すにはどうすればよいですか?あなたが知っていれば「hg qnew」を元に戻す方法は?

hg qpop 
hg import --no-commit .hg/patches/patch-name 
hg qdelete patch-name 

は、より良い方法を追加してください:

答えて

12

あなたの答えは間違いなく動作します - 新しいMercurialのインポートステップを行うことを避けるためにhg strip --keepを使用することができて:

$ hg strip --keep . 
$ hg qdelete patch-name 

--keepフラグは、作業中にstripが作業コピーを無視するようにします(つまり、hg qpopのように)コミットを削除しますが、ファイルへの変更は取り消しません。ストリップした後も、あなたのシリーズにパッチが残っている(適用されていない)ので、それを削除することができます。あなただけの最新qnew保持すべてのローカルの変更を元に戻したい場合は

2

私はanwer hereを見つけました。

更新:アルドの答えに基づいて、別の方法があります:

hg qnew test 
# We can undo the above qnew as: 
hg qrefresh -X '*' 
hg qpop -f 
hg qdelete test 
2

は、一つの選択肢は次のとおりです。ちょうどランダムな文字列である

qcrefresh 123 
hg qpop -f 
hg qdelete <name of the patch> 

お知らせ123こと:あなただけは、(うまくいけばnonexistsntに水銀言っています)123現在のパッチ内のファイル。 Mercurialの新しいバージョンを発行すると、実際に123というファイルが存在しないという警告が表示されますが、これはまさにここで欲しいものです。

現在のパスに変更を残す場合は、crecordextensionqcrefreshコマンドを使用すると、現在のパッチに含める変更をグラフィカルに選択できます。あなたは、のBitbucketからそれをdownloadアーカイブを解凍し、.hgrcでそれを設定する必要があります。

[extensions] 
crecord = <path/to/crecord/package> 
+0

この拡張は非常に有望と思われる、とdarcsのユーザーとして、私は対話的に変更を選択するこの方法が好きです。しかし、私の質問には答えられません。すでに起こった 'qnew'を元に戻す必要がありました。 –

+0

あなたの質問をよく理解していれば、実際には 'qnew'を取り消す必要はありません:' qcrefresh'コマンドを直接使用して、含まれていない変更を除外することができます。除外された変更はローカル変更のままになります。したがって、 'qcrefresh'の後に' qnew'を使ってそれらをすべて新しいパッチに含めることも、 'qcrecord'を使ってそれらのサブセットのみを選択することもできます。 – Aldo

+0

おそらく、エクステンションを正しく使用する方法がわかりません。変更されたリポジトリに 'hg qnew'で始まる一連のコマンドを追加してください。これは' qnew'が呼び出されなかったかのように終了しますか?私は前に 'qrefresh'を使ってこれを試みました(これは' qcrefresh'と同じことを、非対話的にしか行いません)。しかし成功しません。 –

関連する問題