Garcia, 20, will join Barca on a contract until 2026 on July 1 when his deal with City expires. He will be presented on Tuesday and his buyout clause has been fixed at €400 million.
The defender, who joins hours after former City teammate Sergio Aguero made the same move, first joined Barca's La Masia academy in 2008 and came through the club's youth system at the same time as Ansu Fati.
However, he left for City in 2017 and has since made 35 appearances for the first team under Pep Guardiola.
Garcia has been restricted to just 12 games this season, though, after telling City last summer that he did not intend to renew his contract.
ESPN first revealed Barca's interest in re-signing him last June. The Catalan club tried up until the final day of the transfer window in October to bring him back, but they couldn't agree on a fee with the Premier League champions.
Barca tried again in January but, as they were without a president, no one at the club had the power to sign off a transfer.
In the meantime, several other clubs expressed an interest in Garcia, who is part of Luis Enrique's Spain squad for this summer's European Championship, but the centre-back's preference was always to return to Camp Nou.