git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Moving a file back to an earlier revision.

From
Junio C Hamano <junkio@cox.net>
Date
Mar 31, 2006, 21:49 UTC
Message-ID
<7vacb6thc7.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<4dd15d180603311332p60fa1867nc303bd92d515b4e0@mail.gmail.com>
"David Ho" <davidkwho@gmail.com> writes:
Show 16 quoted lines
>> 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.

Previous: David HoNext: David Ho
Message 5 of 8 in “Moving a file back to an earlier revision.”
  1. David HoMar 31, 2006
  2. Linus TorvaldsMar 31, 2006
  3. David HoMar 31, 2006
  4. David HoMar 31, 2006
  5. Junio C HamanoMar 31, 2006
  6. David HoMar 31, 2006
  7. Karl HasselströmApr 3, 2006
  8. Petr BaudisApr 1, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.