Trevor Cahill took a no-hitter into the seventh inning, helping the Arizona Diamondbacks beat the San Francisco Giants 6-2 Wednesday night in a game in which the benches cleared after a tag play at third base.