You have to think in the local frame of the robot. I'll dispense a couple of samples in the 2D-plane for ground robots:

Using the local robot base frame, the robot is always looking to the infinity of the x-axis (no matter where it located on the map). So if you command a Twist {linear.x=1,linear.y=0} the robot will go forward. You can see that if we are working with a non-holonomic robot (like the erratic robot) the linear.y has no meaning. In the other hand if you work with holonomic robot (like the PR2 base) the linear.y would mean lateral move.

The angular.z is the yaw rotation, that it's, the only possible rotation in the 2D plane where the robot stands (if we are talking about a ground robot in the plane). The angular.z veolocity is in radians and anti-clockwise. So a Twist message with angular.z > 0 means turn left in the local frame.