53

同等のMercurialコマンド(またはワークフロー)は何ですか

git reset --mixed HEAD^

また

git reset --soft  HEAD^

つまり、作業ツリーをそのままにしておきたいのですが、リポジトリを最後のコミット前の状態に戻します。驚いたことに、stackoverflowやgoogleで役立つものは何も見つかりませんでした。

使用できないことに注意してください

hg rollback

最後のコミット後にHistEditを使用して履歴の書き換えを行ったためです。

明確にするために追加: いくつかのリベースと履歴編集の後、私はA<-B<-Cになってしまいました。次に、HistEditを使用してBとCを一緒に押しつぶし、A<-C'を取得しました。ここで、コミットC'を分割したいと思います(Bで間違ったファイルをコミットしました)。これを行う最も簡単な方法は、リポジトリを状態A(すべてのリベースと履歴編集が事前に行われているため、技術的にはリポジトリに存在しなかった)に戻し、作業ツリーをC'の状態に戻してから2つ実行することであると考えました。コミットします。

4

2 に答える 2

85

複製する正しい方法git reset --soft HEAD^(現在のコミットを元に戻しますが、作業コピーに変更を保持します)は次のとおりです。

hg strip --keep -r .

-1削除するコミットがリポジトリに入った最後のコミットである場合にのみ機能します。.現在チェックアウトされているコミットを指します。これは、MercurialがGitに最も近いものHEADです。

.子孫がある場合、それらも削除されることに注意してください。コミットを維持したい場合は、コミットIDを取得したら、代わりに次のことができます。

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

これにより、コミットの親が更新され、作業コピー内のファイルがそのコミット時のバージョンに置き換えられます。

于 2013-09-28T06:21:59.220 に答える
1

私はこれを今行うためのより現代的でより簡単な方法はであると信じていますhg uncommit。これにより、空のコミットが残ることに注意してください。これは、後でコミットメッセージを再利用する場合に役立ちます。そうしない場合はhg uncommit --no-keep、空のコミットを残さないように使用します。

hg uncommit [OPTION] ...[FILE]..。

ローカルチェンジセットの一部または全部をコミット解除します

This command undoes the effect of a local commit, returning the affected
files to their uncommitted state. This means that files modified or
deleted in the changeset will be left unchanged, and so will remain
modified in the working directory.

If no files are specified, the commit will be left empty, unless --no-keep
于 2020-10-12T17:14:16.927 に答える