Most VC commands operate on VC filesets. A VC fileset is a collection of one or more files that a VC operation acts on. When you type VC commands in a buffer visiting a version-controlled file, the VC fileset is simply that one file. When you type them in a VC Directory buffer, and some files in it are marked, the VC fileset consists of the marked files (see VC Directory Mode). Likewise, when you invoke a VC command from a Dired buffer, the VC fileset consists of the marked files (see Dired Marks vs. Flags), defaulting to the file shown on the current line if no files are marked.
On modern changeset-based version control systems (see Changeset-based vs File-based Version Control), VC commands handle multi-file VC filesets as a group. For example, committing a multi-file VC fileset generates a single revision, containing the changes to all those files. On older file-based version control systems like CVS, each file in a multi-file VC fileset is handled individually; for example, a commit generates one revision for each changed file.
Perform the next appropriate version control operation on the current VC fileset.
The principal VC command is a multi-purpose command, C-x v v
vc-next-action), which performs the most appropriate
action on the current VC fileset: either registering it with a version
control system, or committing it, or unlocking it, or merging changes
into it. The precise actions are described in detail in the following
subsections. You can use C-x v v either in a file-visiting
buffer, in a Dired buffer, or in a VC Directory buffer; in the latter
two cases the command operates on the fileset consisting of the marked
Note that VC filesets are distinct from the named filesets used for viewing and visiting files in functional groups (see Filesets). Unlike named filesets, VC filesets are not named and don’t persist across sessions.