web-dev-qa-db-ja.com

Mercurialの最後のコミットをどのように「ロールバック」しますか?

私はローカルでのみ使用するMercurialリポジトリを持っています...それは私の個人的な使用のためです(だから私はどこにも「プッシュ」しません)。

私は3つのファイルでコミットしましたが、その後4つのファイルをコミットする必要があることを理解しました...

last(最新の1つのみ)コミットを「ロールバック」し、正しいファイルで「再コミット」する方法はありますか?

(理由はわかりませんが、「現在のリビジョンを修正する」オプションがアクティブではないため、使用できません...)

61
serhio

次のコマンドが必要です。

hg rollback

参照: http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html .

(技術的には、これは2013年8月のバージョン2.7で非推奨になりましたが、まったく同じことを行う代替手段はまだ見ていません。)

86
Martin Eden

答えはstripです(有効にしていない場合は、ここで有効にする方法を確認できます: https:/ /stackoverflow.com/a/18832892/179581 )。

最新のコミットの使用のみを元に戻したい場合:

hg strip --keep -r .

特定のコミットに戻したい場合:

hg strip --keep -r 1234

Stripを使用すると、ファイルの状態は指定したコミットに戻りますが、保留中の変更として保持されるため、それらをファイルとともに新しいコミットに適用できます。

ストリップされたデータを回復します。

コマンドを誤って使用した場合、または変更を回復したい場合は、。hg/strip-backupフォルダーでストリップされたファイルを見つけることができます。

ファイルを復元する方法のチュートリアル、またはそれをグーグルで検索するだけです(すべてのOSで同じように動作します)。

クレジット ForeverWintr

29

現代のhgの場合:

hg uncommit

または、正確な問題の場合:

hg add file4
hg amend
3