彷徨えるフジワラ

年がら年中さまよってます

逆向きパッチの生成

※ "hg diff" の --reverse オプションに関する記述を追加@ 2012/02/08
Windowsコマンドプロンプトで revset 記述を使用する際の注意事項に関する追記あり@2012/02/06
TokyoMercurial #1 で話題になった件の詳細シリーズ - その2。

コミット済み履歴に対して、その『変更内容を打ち消す』=『変更を無かった事にする』(≠ 『履歴記録を無かった事にする』)場合、"hg backout" を使用するのが Mercurial でのお作法。"hg backout" 挙動の詳細は、1.7 版での仕様変更に関して書いた別エントリを参照のこと。

但し、"hg backout" の『打ち消し対象』には、マージ実施リビジョンを指定することができないので、マージ実施リビジョンを打ち消そうとするなら、自前で『マージの打ち消し』に相当する改変を準備する必要がある。

例えば、以下のような履歴ツリーの場合:

"hg diff -c M" によって得られるマージ実施リビジョン M における変更内容を、『逆向き』 (= M の内容を B に戻す) に適用することで、マージ実施を『打ち消す』事ができる。

# M における差分を、逆向きに適用
$ hg diff -c M | patch -R -p1
# 適用結果をコミット
$ hg commit -m 'backout merge at M
$
続きを読む