References: http://ximbiot.com/cvs/manual/

Checkout a branch

# cvs co -r ncmpg ncm
# mv ncm ncmpg

Remove Empty Directories. This will (-P) prune directories (-R) recursively and remove them

cvs update -P -R

Show list of file names that are locally changed

# cvs -Q status | grep -i locally
File: foo.cpp      	Status: Locally Modified
# cvs -qn update
? run.sh
cvs update: warning: .cvsignore was lost
M foo.cpp

File belongs to which branch
When you start using branches, things called sticky tags will start being attached to your files. You can see them with the cvs status command.

# cvs status include/DI.h
===================================================================
File: DI.h             	Status: Locally Modified
 
   Working revision:	1.43.2.2
   Repository revision:	1.43.2.2	/cvs/datalink/src/app/ncm/include/DI.h,v
   Sticky Tag:		ncmpg (branch: 1.43.2)
   Sticky Date:		(none)
   Sticky Options:	(none)

Changes between local and HEAD

# cvs diff -r HEAD include/DI.h
Index: include/DI.h
===================================================================
RCS file: /cvs/datalink/src/app/ncm/include/DI.h,v
retrieving revision 1.45
retrieving revision 1.44
diff -r1.45 -r1.44
24c24
<   * $Revision: 1.45 $
---
>   * $Revision: 1.44 $
27c27
<   * $Date: 2012/05/22 21:41:37 $
---
>   * $Date: 2012/02/06 01:20:14 $
392c392
<   bool textMessage(AM &am, uint32_t address, int connId, addrList* sendList);
---
>   void textMessage(AM &am, uint32_t address, int connId);