"David Ho" <davidkwho@xxxxxxxxx> writes: >> I am working on a board port on a separate branch. The branch has >> accumulated several revision of changes to a driver I worked on. Now, >> someone has come along with a better fix so I want to help test his >> patch. To do that I have to revert my changes to that driver (several >> revisions back) before I can apply his patch. >> >> What would be a convenient way to do that with git? > > Sorry I might already have found it. > > File revisions > > +----+----+ > 1 2 3 > > git diff commit(3)..commit(1) filename | git-apply [please do not top-post]. That lets you go back to the state before 1, so what you are doing is to start from here: ---0---1---2---3 and ---0---1---2---3---* where * has the same tree as 0, and then on top of that you apply his patch: ---0---1---2---3---X But what if you find a room for further improvements in his patch? You could commit X (which is revert of 321 *and* his patch) and then build on top of it, like this: ---0---1---2---3---X---Y and feed him "diff X..Y" back. However. What Linus said is more natural in git. Starting from the same picture, you do this: X (side branch to test his patch on) / ---0---1---2---3 (your original branch) You apply his patch to a new branch. You could even make further improvements like this: X---Y / ---0---1---2---3 And if you decide Y is better than your version 3 after all, you can switch to his branch and then pick up anything important from your development track between 0..3 on top of Y by cherry-picking, and you can even later discard your original development track. On the other hand, if you end up deciding 3 is better than Y after all, you can just discard the whole side branch. Remember, a branch in git is very cheap, and is a powerful way to keep track of things while you decide which alternate universe to take. And even after you decide, you could always look at and even build on the other universe. - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html