A changelist collects a group of changes that belong together as a unit.
Perforce still retains the history of each individual file, but it also tracks a set of related changes into a larger unit, called a changelist.
A changelist is used to move you from one consistent state of your files, to the next consistent state.
If you are making related changes to multiple files, for example:
- You change the signature for some method in a .h header file
- You change the implementation of that method in the .cc file for that class
- You change all the callers of that method to call using the new arguments
Then it's very nice to be able to gather all of that work into a single changelist, so that the other people on your team receive all of those changes at once.
Most modern version control systems have this concept, nowadays, but 20 years ago Perforce was rather unusual for featuring it.