He started his career with Real Madrid, but represented mostly the reserve team, going on to have a three-year spell with Benfica in Portugal. In 2012 he signed with Manchester City, then spent a further three seasons in the Russian Premier League with Zenit Saint Petersburg where he appeared in 108 matches across all competitions. He returned to Spain with Betis in 2017 and retired at Boavista.
The summer of 2006 was a very busy one for García: first, he won the UEFA European Championship with the under-19s,[4] impressing first-team head coach Fabio Capello who recalled him to training sessions. He played most of Real's pre-season games, including a starting line-up spot in both Ramón de Carranza Trophy fixtures, being deployed in central midfield alongside new purchase Emerson;[5] however, he failed to appear for the main squad in official matches.
In August 2007, in the campaign of García's supposed definitive promotion to the first team, head coach Bernd Schuster would eventually prevent that golden opportunity – as fellow cantera players Rubén de la Red and Esteban Granero also left – and offers began to appear from clubs in the Premier League, including Liverpool, and domestic teams such as Atlético Madrid and Deportivo de La Coruña. García would finally settle for Osasuna on 31 August, signing for four seasons for a €2.5 million transfer fee as the Navarre side was keen to replace injury-struck midfielder Javad Nekounam (out of action for several months);[6] having first appeared in a 1–1 home draw to Sevilla, where he played one minute, he scored twice in his first six matches, in victories over Levante (4–1)[7] and Villarreal (3–2).[8]
García's contract included a buy-back clause that could see him return to Real Madrid for €4 million. On 29 April 2008, Osasuna officially reported that the former had exercised their purchase option, and the player returned to the Santiago Bernabéu for 2008–09;[9] he made his first league appearance for Real in his second spell during the 7–1 thrashing of Sporting de Gijón on 24 September, coming on as a second-half substitute for Mahamadou Diarra.[10]
Benfica
Deemed surplus to requirements at Real Madrid, García signed for Benfica in Portugal on 21 July 2009 on a five-year contract for a €7 million transfer fee.[11] An undisputed starter throughout his first season he also scored three goals, most notably through a header in the last minute for the game's only goal against Associação Naval 1º de Maio at home,[12] as the club clung onto the top position on 9 November and eventually won the Primeira Liga.[13]
On 13 August 2014, Zenit Saint Petersburg announced the £13 million signing of García after he passed the medical and agreed to personal terms.[22] He scored his first goal for his new team 18 days later, the only in an away win over Lokomotiv Moscow in the Russian Premier League.[23]
García played 24 matches in the 2014–15 season, scoring three times as the side won the fifth national championship in their history (fourth under the tournament's new denomination).[24]
Betis
On 14 August 2017, the 30-year-old García returned to Spain after eight years to join Real Betis.[25] He appeared in 64 total games for the team from the Estadio Benito Villamarín over three seasons, scoring once in a 3–1 away win against Alavés on 12 March 2018[26] and being sent off the following 10 February in a 3–0 loss at Leganés.[27]
García signed a new two-year contract with the Andalusians on 5 July 2019.[28]
Boavista
After mutually terminating his contract with Betis, García went back to Portugal's top flight by joining Boavista on a three-year deal on 19 August 2020.[29][30] He scored his first goal for the team on 25 October in a 2–2 draw at Famalicão, in which he was sent off.[31]
On 22 June 2022, the 35-year-old García retired. Remaining in Portugal, he immediately went back to Benfica and joined the staff of new manager Roger Schmidt.[32]