merged two branches, and pushed, how to backout/strip?
Arne Babenhauserheide
arne_bab at web.de
Mon Jan 9 21:39:58 UTC 2017
Uwe Brauer <oub at mat.ucm.es> writes:
> > Uwe Brauer <oub at mat.ucm.es> writes:
>
> > If the code being in the open is no problem, you can always revert
> > default to the commit before the merge, then commit, then merge default
> > into vs-11.89, revert vs-11.89 to the other commit before the merge and
> > commit again.
>
> > hg revert --all -r 138:7e1a64287b87
> > hg commit -m "backout bad merge"
> > hg up vs-11.89
> > hg merge default
> > hg ci -m "merge default with the backout"
> > hg revert --all -r 142:1dd731cf6a6a
> > hg ci -m "backout the backout"
>
> > Now from the view of hg, everything should work the same way as before
> > (including later merges into default and later merges of default into
> > vs-11.89).
>
> Thanks very much but I am a bit confused.
>
> Let me consider the following example
>
>
> hg init
> echo Main1 > main.txt
> hg add main.txt
> hg commit -m "Main1"
> echo Main2 >> main.txt
> hg commit -m "Main1"
> hg branch vs-11.89
> echo branch1 > main.txt
> hg commit -m "Good Commit1"
> echo branch2 >> main.txt
> hg commit -m "Good Commit2"
> echo badvariable >> main.txt
> hg commit -m "Bad Commit"
> # back to the default branch
> hg up default
> hg merge vs-11.89
> hg commit -m "Bad merge"
> # bad commit
> hg push
> # the mess is done
>
> The graph looks like this.
> @ changeset: 5:f13b8087f976
> |\ tag: tip
> | | parent: 1:3eafdb4fb59d
> | | parent: 4:03a9b146f1b0
> | | user: Uwe Brauer <oub at mat.ucm.es>
> | | date: Mon Jan 09 19:55:34 2017 +0000
> | | summary: Bad Merge
> | |
> | o changeset: 4:03a9b146f1b0
> | | branch: vs-11.89
> | | user: Uwe Brauer <oub at mat.ucm.es>
> | | date: Mon Jan 09 19:52:19 2017 +0000
> | | summary: Bad Commit
> | |
> | o changeset: 3:bf8a52c245fa
> | | branch: vs-11.89
> | | user: Uwe Brauer <oub at mat.ucm.es>
> | | date: Mon Jan 09 19:52:18 2017 +0000
> | | summary: Good Commit2
> | |
> | o changeset: 2:9102638dffb5
> |/ branch: vs-11.89
> | user: Uwe Brauer <oub at mat.ucm.es>
> | date: Mon Jan 09 19:52:18 2017 +0000
> | summary: Good Commit1
> |
> o changeset: 1:3eafdb4fb59d
> :
> if that were a private repo I would run
>
> hg strip -r 5
>
> And the content of main would be
>
> Main1
> Main2
>
> Because after the strip I end up in the default branch.
>
> Now suppose the repo is public, and I would follow your advice, first
> let me pull the last strip
>
> Then it seems to me that your advice would be translated to
>
> # revert to last good commit in default
> hg revert --all -r 1
> hg commit -m "backout bad merge"
> # go to branch
> hg up vs-11.89
> hg merge default
> hg ci -m "merge default with the backout"
> hg log -G
> # revert the last bad commit to branch vs-11.89
> hg revert --all -r 4
> hg ci -m "backout the backout"
>
>
> The graph looks like
> @ changeset: 7:dfca195276fa
> |\ branch: vs-11.89
> | | tag: tip
> | | parent: 4:03a9b146f1b0
> | | parent: 6:57fc9a2567fa
> | | user: Uwe Brauer <oub at mat.ucm.es>
> | | date: Mon Jan 09 20:01:28 2017 +0000
> | | summary: merge default with the backout
> | |
> | o changeset: 6:57fc9a2567fa
> | | user: Uwe Brauer <oub at mat.ucm.es>
> | | date: Mon Jan 09 20:01:27 2017 +0000
> | | summary: backout bad merge
> | |
> | o changeset: 5:f13b8087f976
> |/| parent: 1:3eafdb4fb59d
> | | parent: 4:03a9b146f1b0
> | | user: Uwe Brauer <oub at mat.ucm.es>
> | | date: Mon Jan 09 19:55:34 2017 +0000
> | | summary: Bad Merge
> | |
>
>
> That is correct? However I end up in the vs-11.89 branch.
>
> I don't really understand
> hg up vs-11.89
> hg merge default
> hg ci -m "merge default with the backout"
> hg log -G
> # revert the last bad commit to branch vs-11.89
> hg revert --all -r 4
> hg ci -m "backout the backout"
>
> Why are the merge and revert necessary?
The merge and revert are necessary, because if you only revert the
default branch, this branch then contains a commit which undoes all the
work in vs-11.89. If you were to do some changes and then merge it into
the vs-11.89 branch to get that branch up to date, it would undo all the
work done in the vs-11.89 branch up until you first merged it into
default.
Reason: Default contains a change which undoes the changes in vs-11.89.
To fix that, vs-11.89 needs a change which undoes the undoing of its
changes.
Best wishes,
Arne
--
Unpolitisch sein
heißt politisch sein
ohne es zu merken
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 800 bytes
Desc: not available
URL: <http://lists.mercurial-scm.org/pipermail/mercurial/attachments/20170109/bafd91b6/attachment.asc>
More information about the Mercurial
mailing list