モダンなマージベースのバージョン管理システム(GitやHgなど。マージベース vs ロックベースのバージョン管理を参照)において、C-x v vは、バージョン管理対象のファイル、VCディレクトリ、またはDiredバッファを参照するバッファから呼び出された際に、以下の処理を行います:
Diffモード下のバッファからC-x v vが呼び出されると、このコマンドはそのバッファを1つ以上のファイルに対するパッチセットを保持しているものとして扱います。その後、該当するファイルに変更を適用し、適切なコミットログメッセージを入力できるよう*vc-log*バッファを表示させた上で、変更をコミットします。
C-x v v と入力すると、*vc-log* バッファで C-c C-k と入力してコミットをキャンセルしない限り、ファイルセットやパッチを変更することはできません。例えば、Emacs がすでに *vc-log* バッファを表示した後に *vc-dir* バッファでマークするファイルを変更した場合、このコミットでは元のファイルセットがそのまま適用されます。(これは、パッチをコミットせずにファイルセット内のファイルの 内容 に変更を加えた場合とは異なります。後者の場合は、Emacs が *vc-log* バッファを表示した後に行った変更であっても、すべてコミットに含まれます。)
コミットをキャンセルすると、Emacsはログメッセージを保存します。これにより、ファイルセットやパッチを調整する必要がある場合、C-c C-k C-x v v M-p と入力するだけで簡単にコミット操作をやり直すことができます。ここで、C-c C-k はコミットをキャンセルし、C-x v v は新しいファイルセットやパッチで別のコミットを開始し、最後に M-p は直前のログメッセージを呼び出します。
現代の分散型バージョン管理システム(Git、Mercurialなど)では、変更内容はローカルでコミットされ、アップストリームリポジトリ(通常はリモートホスト上)に自動的に伝播されることはありません。このような場合、前回の更新以降にリポジトリに変更が加えられていると、コミットが失敗する可能性があります。その場合は、アップストリームから更新を行い、再度試行する必要があります。その際は、C-x v +(ブランチへの変更のプル/プッシュを参照)またはC-x v m(ブランチのマージを参照)を使用してください。
集中型のバージョン管理システムでは、上流の変更によりコミットが失敗した場合、再度 C-x v v と入力して上流リポジトリの変更をマージしてください。
これらのルールは、RCSを非ロックモードで使用した場合にも適用されますが、リポジトリからの変更が自動的にマージされない点が異なります。編集を開始してから別のユーザーが同じファイルに変更をコミットしても、その旨を通知する機能はありません。自身のリビジョンをコミットすると、その別のユーザーによる変更は取り消されます(ただし、変更内容はリポジトリに残るため、不可逆的に失われるわけではありません)。したがって、変更をコミットする前に、現在のリビジョンに変更がないことを確認する必要があります。また、このモードであってもRCSでロックを行うことが可能です。未変更のファイルに対する C-x v v は、通常のロックモードのRCSと同様にファイルをロックします(ロックを用いた基本的なバージョン管理を参照)。