views:

83

answers:

5

If a project has multiple people, say, A,B,C working together and they all edit a same source file.

Couple months later, they realize that what A has been doing is wrong and they want to roll back the file in such a way that only parts/functions/lines/... that A "touched" are removed and the work B and C did is still in the roll back version. In other words, the roll back version has only the work of B and C up to the time they decide to remove A's work.

Is there any version/source control software out there (free/commercial) can do that?

Thanks.

+1  A: 

Git and a bit of scripting will do that. Probably a bit of hand work too, but you can resort commits using interactive rebase.

rassie
a bit of scripting? shouldn't `git revert <commit>` be enough?
knittl
Yes, and you need at least one more command to find all commits by someone particular. That's scripting already.
rassie
A: 

I use TFS and Git. But, there are a lot of free and open source version control softwares. You can find all the source control softwares here.

Pavanred
A: 

Most VCSs should be able to do this -- it's a reverse merge. In Subversion you would identify the revisions made by A and merge them in again, but the other way round. To oversimplify, this means turning line additions into line removals, and vice versa.

# Don't want revision 37 because A made it.
$ svn merge -r 37:36 path

http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html#svn.branchmerge.basicmerging.undo

Edmund
A: 

In Git, you would probably do something like

git revert `git rev-list --author=A`

[Note: completely untested.]

Jörg W Mittag
A: 

I bet it can (easily) be done with Monotone by using `mtn local kill_certs selector certname [certval]' command (see reference) which:

This command deletes certs with the given name on revisions that match the given selector. If a value is given, it restricts itself to only delete certs that also have that same value. Like kill_revision, it is a very dangerous command; it permanently and irrevocably deletes historical information from your database.

So, by using A's certificate, the above command will eliminate 'wrong work' done by him.

gour