We have the following scenario:
Changeset #1 is some unfinished buildable checkin
Changeset #2 is a completed small task
..
Changset #5 completes the work done at CS#1
They all affect the same output dll.
How do we deploy changes done at CS#2 without the other work? Also how can we avoid this situation happening again in the future?
We (using SVN) usually solve this by using feature branches. This enables larger features to be only merged to the mainline after they are finished. A great article about different strategies is here Link
I think that in that case you should try to “disable” your #1 changeset.
let’s say if it is a new feature, don’t make any way to make this code run in the application.
if it is a replacement of an existing code, write it while the old code is in use, and enable it when it is done
Use a feature branch or a shelveset. Both will allow you to store the work in progress on the server and run a Team Build. A feature branch is a bit more heavyweight but can also be more flexible.