The HTC-Highroad rider (inset) pipped Belgian Philippe Gilbert, of Omega Pharma-Lotto, and Spaniard Jose Joaquin Rojas, of Movistar, in a frantic climax in Brittany.
Norwegian Thor Hushovd, of Garmin, retained the yellow jersey after finishing 10th, while a series of crashes hampered the likes of champion Alberto Contador and Briton Bradley Wiggins.
It was a 16th stage win of Cavendish’s career, and a welcome change of fortune following the disappointment of Monday, when he was stripped of points following one of two skirmishes.
“It was proper hard, my legs were going at the end,” he said. “I am really happy with that.”
Wiggins, of Team Sky, was forced to change his bike after becoming one of the first to fall.
He was followed by Contador, whose team-mate Nicki Sorensen fell after his tangling with a photographer’s motorbike.