"It felt good to finally come through with guys on base in a clutch spot personally and as a team," said Garko, who had one RBI in his previous 10 games.
The Indians took two of three from Tampa Bay after being swept in a three-game series at Yankee Stadium. They were outscored 27-11 in New York.
"I think it was a big win for us, as big a win as we've had all year -- two weeks in," Cleveland manager Eric Wedge said. "You look at some of the circumstances and situations that we've run through this year, for us to come back and take one late right here should be a big pickup for us."
Shields matched a Tampa Bay record with 12 strikeouts and B.J. Upton hit a tiebreaking single in the eighth to help the Devil Rays take a 4-2 lead.
"He's a fighter up there," Wedge said. "He doesn't give in. He really sticks his nose in there two strikes."
Stokes got the chance for his first career save because closer Al Reyes, who is 6-for-6 in save opportunities, had pitched in the previous two games.
"I let the team down," Stokes said. "It's unacceptable. Terrible."
Shields gave up only two hits over eight innings in an eye-opening performance. During one stretch he struck out eight of nine batters. He allowed just one baserunner -- a sixth-inning walk to Grady Sizemore -- after the second.
"We'll move on," Shields said. "I'm going to build on this game."
Dan Wheeler also fanned 12 batters for Tampa Bay on Sept. 12, 1999, against Oakland.
Akinori Iwamura opened the eighth with a walk against Jake Westbrook and went to second when Dioner Navarro's bunt single stopped rolling on the first-base line. After reliever Aaron Fultz struck out pinch-hitter Jonny Gomes, Upton put the Devil Rays up 3-2 with a single to center off Tom Mastny (1-0).
Another run scored on Mastny's second wild pitch of the inning.
Joe Borowski got three quick outs in the ninth for his seventh save.
Westbrook allowed four runs and four hits in seven-plus innings. He was coming off a terrible start last Tuesday when he allowed eight runs in 1 2/3 innings of a 10-3 loss to the New York Yankees.
Jhonny Peralta put the Indians ahead 2-0 with a two-run homer in the second.
Tampa Bay pulled to 2-1 in the fourth thanks in part to two miscues by Martinez. Rocco Baldelli singled, stole second and went to third on the catcher's throwing error. Brendan Harris then reached first on a strikeout after Westbrook's pitch bounced in the dirt. Martinez scooped up the ball but failed to tag Harris, then looked toward third to hold Baldelli as Harris ran to first.
Baldelli scored on Carl Crawford's RBI grounder.
Carlos Pena tied it at 2 with a solo homer in the sixth.
Indians designated hitter Travis Hafner went 0-for-3 with two strikeouts and a ninth-inning walk. He had 12 hits in 19 at-bats over his previous five games. He had also homered in his previous six games against Tampa Bay.
- Wedge said the team is "leaning" toward having LHP Cliff Lee (strained right abdominal muscle) make one additional minor league rehab assignment before joining the rotation. A decision could come after Lee throws a bullpen session Monday.
- Shields has given up six homers over his last three starts.
- Cleveland OF David Dellucci (left calf tightness) was out of the lineup. He could start again in the next few days.
- Indians 3B Andy Marte came out with a mild left hamstring strain and is day to day.