GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Undo.html ・ emacs-doc.conao3.com

30.1.8 バージョン管理操作の取り消し

C-x v u
C-x v @

現在のVCファイルセット内のワークファイルを最終リビジョン (vc-revert) に戻す。

M-x vc-revert-or-delete-revision

古いコミットの影響を取り消す。

M-x vc-revert-revision

以前のコミットによる変更を取り消す新しいコミットを作成してください。

M-x vc-delete-revision

リビジョン履歴からプッシュされていないコミットを削除する。

現在のVCファイルセットに加えた変更をすべて破棄したい場合は、C-x v u または C-x v @ (vc-revert) と入力してください。変更を破棄する前に確認が求められます。同意すると、ファイルセットが元に戻ります。

vc-revert-show-diff が nil 以外の場合、このコマンドは作業ファイルと、編集を開始したリビジョンとの差分を表示します。その後、差分バッファは破棄されるか(この変数が kill の場合)、あるいはバッファが破棄されます(それ以外の nil 以外の値の場合)。vc-revert で差分を表示したくない場合は、この変数を nil に設定してください(C-x v = を使えば引き続き直接差分を確認できます。詳細は 古いリビジョンの確認と比較 を参照してください)。

ロックベースのバージョン管理システムでは、vc-revert を指定するとファイルはロックされないままとなり、編集を再開するには再度ロックする必要があります。また、ファイルをロックした後に変更しないことに決めた場合は、vc-revert を使用してロックを解除することもできます。

自分または他者がすでにコミットした変更を取り消すには、M-x vc-revert-or-delete-revision を使用できます。これをコミットのリバートと呼びます。コマンドでリバート対象のリビジョンを指定すると、VCバックエンドがそれをリバートします。

ほとんどのバックエンドでは、リビジョンによる変更を取り消す新しいコミットを作成することでこれを実現しています。分散型VCSの場合、そのコミットが自身で作成し、まだプッシュしていないものであるなら、Emacsは代わりにそれを完全に削除することを提案します。プレフィックス引数を指定すると、このコマンドはリビジョンの完全な削除を試みるだけとなり、すでにプッシュされている場合は失敗します。

この機能を利用する別の方法として、ログビューモードのバッファで R にバインドされている log-view-revert-or-delete-revisions コマンドがあります(VC Change Log を参照)。M-x vc-revision revert を直接使用する場合に比べ、意図したリビジョンを確実に元に戻せるようになります。

より具体的で特化したコマンドには、M-x vc-revert-revision と M-x vc-delete-revision があります。前者はリビジョンの指定を求め、使用している VCS やリビジョンがプッシュ済みかどうかにかかわらず、常にそのリビジョンによる変更を取り消す新しいコミットを作成します。後者のコマンドはリビジョンの指定を求め、常にそれを削除しますが、コミットがプッシュ済みの場合は処理が停止します。通常は vc-revert-or-delete-revision で十分ですが、特定のバージョン管理履歴を構築する際には、vc-revert-revision や vc-delete-revision が有用な場合があります。