hg can't merge branch - mercurial

I have a mercurial repository with a named branch branchA. The revision looks like this
default --A-------------------------G
\
branchA \---B---C---D---E---F
The output of hg branches is:
default 193:817540244f12
branchA 192:b7cac921fec3
What I want to do is to merge the change G in default to branchA. But when I try to update to branchA with hg update branchA, hg branch shows it's still in default. With hg merge default, mercurial complains "abort: nothing to merge (use 'hg update' or check 'hg heads')".
The hg heads output is:
changeset: 193:817540244f12
tag: tip
parent: 188:7ccc08b69f25
...
changeset: 192:b7cac921fec3
branch: branchA

Related

Mercurial definitive remove branch

I already read topics like How to correctly close a feature branch in Mercurial?
But I want remove branches reference.
Example
hg branch my-branch
hg commit -m "commit" --close-branch
hg branches -c
hg branches -c displays my-branch in the list. And I can't create a new branch named my-branch.
hg branch my-branch
Mercurial shows me an error :
abort: a branch of the same name already exists
Do you know how to remove branch reference definitively ?
hg help branch
...
options:
-f --force set branch name even if it shadows an existing branch
...

can't update to mercurial branch with sub-repository

hg update develop --clean
remote: conq: repository does not exist.
abort: no suitable response from remote hg!
I would like to be able to switch to my develop branch, to undo my last 2 commits and merge the develop branch with tip or close it!
OR
just close and rename the branch, but since I can not update to it I don't know what to do.
I would like to: overwrite branch x with branch y:
hg update x
hg commit --close-branch -m 'closing branch x, will be overwriten with branch y'
hg update y
hg branch -f x
hg ci
but i can't update to x. How to fix/force this?
I used the MQ extension:
hg qinit
hg qimport -r 4:tip
hg qpop -a
hg qdelete 4.diff
hg qpush -a
hg qfinish -a
That worked but after a pull the removed stuff was back in..
But, I just created a new Branch one from tip using -f with the same name.
that works good enough for me. Can't remove the 'wrong' branch it since it is 'out of the bottle' published.

Mercurial: Unable to push to remote repository after pull-merge-commit

I can't figure out why i'm still unable to push to a remote repository:
> hg pull
pulling from ......
searching for changes
no changes found
> hg merge
abort: branch 'default' has one head - please merge with an explicit rev
(run 'hg heads' to see all heads)
> hg heads
changeset: 12942:...
tag: tip
parent: 12940:...
parent: 12941:...
summary: merge
> hg branches
default 12942:...
> hg commit
nothing changed
and finally
> hg push
pushing to ...
searching for changes
abort: push creates new remote heads on branch 'default'!
(did you forget to merge? use push -f to force)
why would that be?
Not sure why, but this solved the issue:
hg push -r tip
where -r is
-r --rev REV [+] a changeset intended to be included in the destination

Correct way to jump back and forth between two branches?

If I create a branch:
hg branch branch-A
and commit to it:
hg commit -m "improvement A-1"
and then create a second branch:
hg branch branch-B
and commit to it:
hg commit -m "improvement B-1"
If I want to add my next change to branch-A do I simply type:
hg branch branch-A
and commit to it as before:
hg commit -m "improvement A-2"
hg branch
always creates a branch (although it warns you if the branch already exists.) To switch to an existing branch, either
hg update -r <some revision in that branch>
or
hg update <that branch>
will switch to that branch.

How to move some changeset to a new branch in mercurial

I want to move a changeset from one branch to another. Basically, I currently have:
A -> B -> C -> D # default branch
And I want:
A # default branch
\-> B -> C -> D # some_new_branch
Where some_new_branch does not exist yet. I am used to git, so I guess there is a simple "mercurial" way I am missing.
One way is to export a patch for B,C,D; update to A; branch; apply patch:
hg export -o patch B C D
hg update A
hg branch branchname
hg import patch
To remove B,C,D from the default branch, use the mq extension's strip command.
Sounds a bit like a cherry-pick operation in git. The Transplant Extension may be what you're looking for.
With Mercurial Queue:
# mark revisions as draft in case they were already shared
#hg phase --draft --force B:D
# make changesets a patch queue commits
# (patches are stored .hg/patches)
hg qimport -r B:D
# pop changesets from current branch
hg qpop -a
#
hg branch some_new_branch
# push changesets to new branch
hg qpush -a
# and make them commits
hg qfinish -a
Without comments:
hg qimport -r B:D
hg qpop -a
hg branch some_new_branch
hg qpush -a
hg qfinish -a
Alternative to transplant or patch, you could use graft.
hg update A
hg branch branchname
hg graft -D "B:D"
hg strip B
Note that changing history is bad practice. You should strip only if you haven't pushed yet. Otherwise, you could still backout your changes.