There are two ways to do this..
- If you want to keep the singer's timing as is and have a slightly shifting Tempo that matches it, that's beat-mapping;
- If you want to have a steady Tempo and conform the singer's timing to it, that's Quantizing [done with Flex Time in GarageBand & Logic].
I've attached a link to a GarageBand course up top -- there are videos on quantizing and using Flex on audio. However unless the singer's timing is close to a particular Tempo and you know what that Tempo is, you'd have to do some guesswork to set to the Tempo to the nearest speed before you could even try Flexing (quantizing) the timing of the vocal. And GB doesn't really do the other approach, beat-mapping.
GarageBand is a scaled-down versions of Apple's bigger DAW, Logic -- Logic is not free but it has a feature called Smart Tempo that's designed to do what you want [though even there a vocal track with inconsistent timing and no clear beat (drums, percussion) might prove more difficult and require manual tweaking after using the automatic functions].
Here's a link to another course on Logic's Smart Tempo feature -- even if you have no intention of bumping up to Logic it could be informative on these Tempo-related topics..