Naby Keita pulled a goal back for Guinea early in the second half, but they could not find an equaliser. The Liverpool midfielder was cautioned late in the game for dissent and, in a further blow for Guinea, he will miss their next game in the knockout phase.
Yet the centre forward scuffed his shot and Zimbabwe defender Bruce Kangwa got a touch to turn it away.
Two minutes later Musona opened the scoring, rising unmarked in the middle of the Guinea defence to head home from close range.
A second goal followed two minutes before halftime when Mahachi struck a left-footed effort under the body of Guinea goalkeeper Aly Keita.
Guinea got the second half off to a good start as Keita thrashed the ball into the net to pull one back.
It set up an exciting second half as Guinea pressed forward for the equaliser but a makeshift Zimbabwe side held firm to snap a 14-match winless run stretching back to last March.
“We go home with some pride and that is what is important for us,” said coach Norman Mapeza.
The match was refereed by the first woman to officiate a game at the finals — the 35-year-old Rwandan Salima Mukansanga, who grew increasingly weary of Keita’s persistent complaints about Zimbabwean time wasting and booked him in the last minute.
It was his second caution of the first round and means he now misses Guinea’s last-16 match in Bafoussam on Jan. 24 against the runner-up in Group F, whose identity will be decided on Thursday.
Zimbabwe were already out of contention and were the first team to be mathematically eliminated after they lost to Malawi on Thursday.