Merge changesets have two parents and therefore two different ways of looking at what changed. By default if you use hg diff -c <changeset>
it will show the diff as compared to the first parent which typically represented the working directory at the time of the merge. If that assumption is wrong, it is an easy way to introduce errors.
That leads to the question of why you are grafting a merge change set and not the original changeset(s) themselves. If there are a series of changesets you want to graft and you are using the merge changeset to "rollup" that series, you can graft the original multiple changes at once: hg graft "1000::1005"
.
Personally, I typically use hg rebase
for tasks such as this, though that requires enabling the rebase extension in your hgrc or mercurial.ini:
[extensions]
rebase=
hg export
work, and why don't you have to specify a--base
commit there? – Kenyakenyatta