現在のVCファイルセット内のワークファイルを最終リビジョン (vc-revert) に戻す。
古いコミットの影響を取り消す。
以前のコミットによる変更を取り消す新しいコミットを作成してください。
リビジョン履歴からプッシュされていないコミットを削除する。
現在の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 が有用な場合があります。