I think docker images will be one way to do this, we had the exact same requirement at my previous job.
Say you have one repository and each directory (let's say the directories are A, B, C and D) represents a microservice of its own. Each of them will have their own docker images. So, when you check in code (and make changes only in B microservice's directory), the docker image B will be built. A web hook will now get fired indicating that the docker image for microservice B has changed and only that microservice will get deployed.