2012-10-28 9 views
38

同等の水銀コマンド(またはワークフロー)であるもの作業ツリーをそのまま残しておき、リポジトリを最後のコミットの前の状態に戻します。驚いたことに私はstackoverflowやgoogleで役に立つものが見つかりませんでした。私は最後のコミット後HISTEDITを使用して書き換え、いくつかの歴史を行ってきたように私はMercurialは(HG)(--mixedまたは--soft)

hg rollback 

を使用することはできません

注意。追加され明確にする

:私は< -B-<、-Cになってしまっていたいくつかのリベースと歴史編集後 。それから、HistEditを使ってBとCを一緒にスカッシュし、< -C 'を得ました。今私はコミットC 'を分割したい(私は間違ったファイルをコミットしたB)。私はこれを行う最も簡単な方法は、リポジトリを状態A(リポジトリに存在することは決してありませんでした。リポジトリはすべて手作業でリポジトリを編集していたために存在しませんでした)と作業ツリーをC 'の状態に戻し、コミットします。

答えて

55

(作業コピーの現在のコミットが、続けるの変更を元に戻す)git reset --soft HEAD^を複製する正しい方法は次のとおりです。非常に最後のものは、入力されたコミットをあなたが取り除くしたいコミットである場合

hg strip --keep -r . 

-1のみ動作しますリポジトリ.は、現在チェックアウトされているコミットを指します。これは、MercurialがGitのHEADにもっとも近いものです。

.に子孫がある場合、それらも取り除かれます。あなたの周りにコミット維持したい場合は、コミットIDを持っていたら、それから、あなたの代わりにすることができます:

hg update .^ 
hg revert --all -r <commit id> 

これはのcommit親に更新してからのバージョンで作業コピー中のファイルを置き換えますコミットします。

+0

注意:これにはhgのMQ拡張が必要です。 –

+2

Mercurial 2.8以降には専用の[strip extension](https://www.mercurial-scm.org/wiki/StripExtension)が付属しています。 – fhd

関連する問題