rebase: turn rebaseskipobsolete on by default
Consider the following use case. User has a set of commits he wants to rebase
onto some destination. Some of the commits in the set are already rebased
and their new versions are now among the ancestors of destination. Traditional
rebase behavior would make the rebase and effectively try to apply older
versions of these commits on top of newer versions, like this:
a` --> b --> a`
(where both 'a`' and 'a``' are rebased versions of 'a')
This is not desired since 'b' might have made changes to 'a`' which can now
result in merge conflicts. We can avoid these merge conflicts since we know
that 'a``' is an older version of 'a`', so we don't even need to put it on top
of 'b'. Rebaseskipobsolete allows us to do exactly that.
Another undesired effect of a pure rebase is that now 'a`' and 'a``' are both
successors to 'a' which is a divergence. We don't want that and not rebasing
'a' the second time allows to avoid it.
This was not enabled by default initially because we wanted to have some more
experience with it. After months of painless usages in multiple places, we are
confident enough to turn it on my default.
Initial setup.
$ hg init repo
$ cd repo
$ touch thefile
$ hg ci -A -m 'Initial commit.'
adding thefile
Create a tag.
$ hg tag branchortag
Create a branch with the same name as the tag.
$ hg branch branchortag
marked working directory as branch branchortag
(branches are permanent and global, did you want a bookmark?)
$ hg ci -m 'Create a branch with the same name as a tag.'
This is what we have:
$ hg log
changeset: 2:10519b3f489a
branch: branchortag
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: Create a branch with the same name as a tag.
changeset: 1:2635c45ca99b
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: Added tag branchortag for changeset f57387372b5d
changeset: 0:f57387372b5d
tag: branchortag
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: Initial commit.
Update to the tag:
$ hg up 'tag(branchortag)'
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg parents
changeset: 0:f57387372b5d
tag: branchortag
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: Initial commit.
Updating to the branch:
$ hg up 'branch(branchortag)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg parents
changeset: 2:10519b3f489a
branch: branchortag
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: Create a branch with the same name as a tag.
$ cd ..