Merge Tags
Most developers use CVS tags to help with merging.  Some use a single tag convention while other use a 2 tag convention.  Typically a single tag convention is where a a tag is placed on the revision where the last merge was completed.  Because CVS does not store merge history, this is needed to remember where the last merge was complete so that any subsequent merges can continue where it was left off last time.  Therefore the merge is performed from the tag to the last revision in the source branch.

Typically a 2 tag convention is used where a BEFORE tag and an AFTER tag is used.  A merge occurs by first moving the BEFORE tag to the desired final revision in the source branch.  This is usually the last revision in the source branch (as in the single tag convention).  The AFTER tag remains on where the last merge was completed.  Then the merge is performed from the AFTER tag to the BEFORE tag.  Once the merge is completed, the AFTER tag is then moved down to the BEFORE tag.  One advantage of having the BEFORE tag is to allow a full repository merge WHILE developers are still checking in code on the source branch.  The BEFORE tag will not move as developers checkin new revisions on the source branch such that the merge process (sometimes taking a while to review merge changes and resolving conflicts) will not become a moving target.

The naming convention is used in the Move Merge Tags operation from within the revision graph window.  The supported wildcards are:
Wildcard Definition
$T Represents the word AFTER or BEFORE (in a 2 tag merging convention only)
$S Represents the source branch name
$D Represents the destination branch name
Merge Tags