Garner was born in Birkenhead, England. He joined the Manchester United Academy at under-8 level. Garner made his first appearances for the Manchester United Under-18s at the end of the 2016–17 season, appearing as a substitute in games against Arsenal and Blackburn Rovers. He signed as an academy scholar in July 2017 and was a regular for the Under-18s in 2017–18, scoring four goals in 24 appearances in all competitions as Manchester United won the Premier League North title; however, he missed the final of the competition against Chelsea as he was on international duty. He also made eight appearances for the Manchester United Under-19s as they made it to the round of 16 of the 2017–18 UEFA Youth League before being eliminated by local rivalsLiverpool.
2018–19 season
Garner first became involved with the Manchester United first team on the club's summer 2018 tour of the United States, starting in the match against San Jose Earthquakes on 22 July, before being replaced by Scott McTominay at half-time. He also made substitute appearances against Real Madrid on 1 August and Bayern Munich on 5 August. With Manchester United's qualification from their 2018–19 UEFA Champions League group secure, Garner was named on the bench for their final group game against Valencia on 12 December, but was not used in the match. He was named as a substitute for Manchester United's 2018–19 FA Cup Third Round tie against Reading on 5 January 2019, but, again, was not brought on. On 27 February 2019, he made his first-team debut, coming on as a 90th-minute substitute for Fred in a 3–1 league win away to Crystal Palace. On 15 March, Garner signed a contract extension, keeping him at United until June 2022 with an option for a further year.
2019–20 season
Garner again went on the first team's summer tour in 2019, along with fellow academy players Angel Gomes, Tahith Chong and Mason Greenwood. He came on as a substitute in the 83rd minute of the first pre-season game against Perth Glory, and scored his first senior goal with his first touch within two minutes, a low drive into the bottom right corner from outside the box. On 24 October 2019, he made his European debut for Manchester United against Partizan in the Europa League.