← Back to team overview

dolfin team mailing list archive

Re: Reverting?

 

On 15 November 2011 22:21, Anders Logg <logg@xxxxxxxxx> wrote:
> On Tue, Nov 15, 2011 at 10:15:43PM +0100, Martin Sandve Alnæs wrote:
>> On 15 November 2011 22:05, Anders Logg <logg@xxxxxxxxx> wrote:
>> > On Tue, Nov 15, 2011 at 09:51:06PM +0100, Anders Logg wrote:
>> >> My recent work has broken the buildbot. Can anyone give a quick tip
>> >> for how to revert the changes from the branch in such a way that I can
>> >> reapply the changes + a proper fix later?
>> >>
>> >> It should be fairly quick to resolve the issue but I might as well
>> >> learn to revert the proper way.
>> >
>> > I believe Marie has pushed a bug fix now, but if someone has a good
>> > recipe please share. I can add it to the web docs for future
>> > reference.
>>
>> Revert the entire state to revision 19:
>> bzr revert -r 19
>> bzr commit -m "Backout fix for bug #5"
>>
>> Revert one or more previous commits:
>> bzr merge -r 10..9   # backs out changes from commit 10
>> bzr merge -r 7..4   # backs out changes from commits 5,6,7
>>
>> From
>> http://doc.bazaar.canonical.com/beta/en/user-guide/undoing_mistakes.html
>>
>> Note that the important point here is that changes that have been
>> pushed somewhere else should be reverted or merged reversely like
>> above, not e.g. using uncommit because that would mess up your history
>> vs the already pushed history.
>
> Thanks. And how does one add back the changes once they have been
> fixed.
>
> In the first case, I would do this in my local (checked out) 1.0.x:
>
>  $ bzr revert -r 19
>  $ bzr commit -m "Backout fix for bug #5"
>
> Then I would fix the bug in my local 1.0.x-logg.
>
> How do I then get the changes from 1.0.x-logg (including the
> changesets that were reverted) from 1.0.x-logg into 1.0.x?
>
> Just the usual way?
>
>  cd 1.0.x
>  bzr merge ../1.0.x-logg
>  bzr commit -m "Proper fix for bug #5"

Since 1.0.x already contains the original commit, this shouldn't work.
You'll need to somehow record a new commit with the proper changes.
This will depend on the situation and could be messy, but assuming you
want to re-introduce _all_ changes that were reverted previously, you
should be able to reverse merge the commit which contains the old
revert :)

Disclaimer: I haven't tested this yet!

First:
$ bzr revert -r 19
$ bzr commit -m "Backout fix for bug #5"
Say this introduces a commit -r25.
<work work work gets us up to -r30>

Then:
$ bzr merge -r25..24 # Reverse cherry-pick the backout commit from above
$ bzr commit -m "Re-apply old incomplete fix for bug #5"
<work work fixing bug properly>
$ bzr commit -m "Proper fix for bug #5"


By the way, I don't like this sentence from the manual:
"Unlike a normal merge, Bazaar does not currently track cherrypicks."
Not sure what kind of trouble that may cause.
I recommend resolving tricky merge situations
in a third branch which can safely be discarded,
and inspecting the result with e.g. log, diff, missing.

Martin


Follow ups

References