My two cents: having different images for branches is a good workaround, but I will have to manually control those images, while git abstracts this a little since I have a way to tell it to stash and bring back work in progress. Depending on the project, I think loading a new image with a fresh HEAD would require a lot of time to bring all dependencies and compile, while just getting changes made at certain point from an image and stash them would be much faster, am I wrong?