just to mention 3 interesting team practices that together do help here:
– release only from the head of the repo (no branches)
– check-in only shippable code
– use Latent Code Patterns to check-in shippable code even when the development of user story is in progress
but I’m sure you already know them, we learned them when we were working together🙂