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.