The Indians snapped a five-game losing streak in a game that saw all but one of the runs come in on homers.
Justin Masterson (8-3) allowed a lone run on four hits in a six-inning performance to win for the fourth time in five starts.
The Indians were still clinging to a 2-1 lead in the sixth when Asdrubal Cabrera reached on a two-out single and moved to third on a base hit by Swisher. Giambi followed with his fourth home run of the season, one that drove Cincinnati starter Bronson Arroyo (5-5) from the game.
Cincinnati has lost each of its last eight games in Cleveland.
Attkisson leaves CBS News, reportedly over network's 'liberal bias'
Beautician charged with giving client fatal silicone butt injection