How to update to a branch by name when there's a hash collision?

為{幸葍}努か 提交于 2019-12-11 06:08:15

问题


So my coworker just won the hash lottery. We create a feature branch for every ticket we resolve, following the convention b##### where ##### is the issue number.

The trouble is that when he tried updating to that branch (before it existed) via hg up branch(b29477), it took him to default instead of saying that the branch doesn't exist.

It turns out that branch(b29477) actually returns the name of branch of the thing inside the parens (instead of forcing Mercurial to evaluate the thing inside the parens as a branch name as I thought!), and there so happened to be a changeset beginning with b29477 which was on default, so instead of saying the branch didn't exist, it took him to the tip of default!

Now we can work around this problem by choosing a different branch name, but I want to know if there's any way to hg update <branch_name_and_dont_interpret_this_as_anything_else>?


BTW, hg log also lies about what it's --branch parameter does. It says:

-b --branch BRANCH [+]   show changesets within the given named branch

But that's not true at all. Go ahead and run it with a hash. e.g.,

hg log --branch eea844fb

And it will turn up results. If you dig through the docs, you'll discover that it's actually the same as:

hg log -r 'branch(eea844fb)'

回答1:


Try this:

hg update -r "branch('literal:b29477')"

From the Mercurial help page:

branch(string or set)

All changesets belonging to the given branch or the branches of the given changesets.

If string starts with re:, the remainder of the name is treated as a regular expression. To match a branch that actually starts with re:, use the prefix literal:.

This means that if you use the literal prefix, you are specifying a string. And a string is not a set.

As the text says, if you specify a changeset, Mercurial will show:

the branches of the given changesets



来源:https://stackoverflow.com/questions/41864409/how-to-update-to-a-branch-by-name-when-theres-a-hash-collision

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!