Holmes was born in Birkenhead, Merseyside. He began his career with Tranmere Rovers the team he supports, joining the club at the age of seven. He originally played as a Forward but eventually became a Defender. Having captained the youth and reserve teams, he signed his first professional in July 2007, shortly before the 2007–08 season. Holmes spent the latter half of the season on loan at Conference North club Southport, making 15 appearances. At the end of 2008–09, having made one league appearance during a 1–0 defeat to Yeovil Town on 22 November 2008, Holmes was released by Tranmere.
Following his release, Holmes spent time on trial with Chester City before signing for The New Saints, joining his brother Tommy at the club. He made his debut in a 2–1 defeat to Icelandic team Knattspyrnufélagið Fram in the first qualifying round of the UEFA Europa League. At the end of his first season with the club, he was named in the Welsh Premier League team of the season. He left TNS at the end of 2010–11, refusing to sign a new contract, and also being named in the Welsh Premier team of the season.
Tranmere Rovers (second spell)
On 27 June 2011, Holmes re-signed for Tranmere Rovers on a one-year contract. On 25 August 2011, he joined Fleetwood Town on a one-month loan to attempt to gain some first-team experience. After breaking into the team in early 2012 and becoming a regular, and also winning the young player of the year award, Tranmere took up a further one year option on him for 2012–13. Holmes scored his first goal for Tranmere in a 5–2 away win over Crawley Town on 22 September 2012.
On 24 June 2015, following Tranmere's relegation into the National League, Holmes joined League Two club Newport County. He made his debut for Newport on 8 August 2015 versus Cambridge United. He was offered a new contract by Newport at the end of 2015–16 but the offer was withdrawn and he was released after he failed to accept the contract by the deadline of 10 June 2016.
On 10 July 2017, Holmes signed for Welsh Premier League club Bangor City.
Connah's Quay Nomads
Following Bangor's demotion from the Welsh Premier League, Holmes joined Connah's Quay Nomads, with Nomads manager Andy Morrison stating Holmes was "the outstanding fullback in the league last season".