質問を理解していると思うものに対する私のわずかに異なる解決策(言い換えると、このブランチ/トランクの現在のリーフよりも古い「good_revision」で作業する方法、これをbad_leafと呼び、「good_revision」以降の変更を悪いものとして扱う方法)、これは 2 つのバージョン間の差分を適用するのと同じようなものですが、順序が逆になります。
デフォルトの最後の一般的なコミットの代わりに、bad_leaf からのベースラインを使用して、good_revision からの (空の) フォークをマージします。したがって、適用される差分は、作成した good_revision フォークに戻った元のブランチの差分であり、それらが既に適用されていることはわかりません。最新のものをベースラインとして使用すると、それらが既に適用されているため、そうでなければすべての変更を無視するようになるものを「非表示」にします。
fossil update good_revision
fossil commit --allow-fork --allow-empty
# note the uuid from that commit (for use as forked_basis below)
fossil merge -f --integrate --baseline bad_leaf forked_basis
もちろん、一度幸せになると、
fossil commit
「間違い」と呼ばれるべきブランチを作成しません。good_revision から bad_leaf に bad_leaf への逆差分を適用して元の場所に戻すだけで、以前と同じ (新しい) リーフにコミットし続けることができます。 bad_leaf で。
diff
上記のコマンドが一致した後のチェックアウトと比較した、元の good_revision でのチェックアウトに対する (fossil diff ではなく、ストレート gnu) 。ファイルを失った空のディレクトリを除きますが、化石は死んだディレクトリを追跡/整理しません。
注意: 私は化石をそれほど長く使用しておらず、cvs/svn/git/hg/perforce/clearcase で慣れ親しんできた一般的な方法とはいくつかの点で異なります。
この回答を追加する理由: 既存の回答を理解するのが難しく、結果として自分自身がそれらを正しく行うことができるかどうか確信が持てませんでした。