我默认提交了一些我不想要的默认提交。这就是我在git中所做的事情,同等价值的是什么?
git branch -m not_default
git checkout osrf/default
git checkout -b default
这是我尝试过的(并且失败了)
hg branch -m not_default (default still exists after this)
hg pull -b default osrf (says no changes)
hg update default (does nothing)
这不起作用,我离开了我开始的地方。
答案 0 :(得分:0)
在hg help branch
的最顶部附近,您会看到以下文字:
注意:
分支名称是永久的和全球的。使用
hg bookmark
创建一个 轻量级书签代替。有关详情,请参阅hg help glossary
有关命名分支和书签的信息。
因此,虽然您可以更改与 new 提交相关联的名称,包括为新提交提供之前从未出现的分支名称,从而创建新分支 - 您永远不能更改现有提交的分支名称。 修改:As Reimer Behrends says,您通常不会需要在Mercurial中执行此操作。 Mercurial声称你从不需要这样做而只是不允许它。
这与Git非常不同,Git的“分支”(分支名称)更像是Mercurial书签。 修改:Git中的提交同时位于多个分支上,每个分支名称用于标识提示提交 1 这样命名的分支和 reachability 确定哪些提交包含在哪些分支中。 (但是,如果包含Git提交的分支数量下降到零,则提交可能易受垃圾回收攻击,具体取决于它是否具有某些非分支名称可以找到它的名称。)Mercurial中的提交总是在一个分支上。那个分支总是有一个名字。
(技术上可以通过复制Mercurial存储库并使用Convert Extension重新映射分支名称来重命名分支。Evolve Extension is also supposed to be able to do it,而不是我测试过的。)
1 提示提交是一个Git概念,没有与Mercurial的一对一映射。 Mercurial head 是一个没有子节点的提交,在Git中,分支提示经常没有子节点,但是分支提示提交不是必需的他们没有孩子。在Mercurial和Git中,当前提交为 X 时创建一个新提交会在Git中创建一个新的子项 X - 但是在“开启”的任何分支中,如果你在任何一个分支上,该分支的名称被重写指向 new 提交,因为它是新的并且没有子项 - 现在是相当于一个Mercurial头。
答案 1 :(得分:0)
你什么都不做。 Mercurial的分支模型与Git完全不同。
Git要求分支名称不仅要命名分支,还要保持它们的存活(这样它们就不会被垃圾收集)。
在Mercurial中,您可以返回到原始提交,在那里执行hg update
并在该点进行下一次提交。这将使您的新提交成为“匿名分支”(请参阅hg help glossary
)。从那里,额外的提交将进入一个新的匿名分支。
您可以使用书签(hg help bookmark
)以类似Git的方式为分支的提示命名,但严格来说,这不是必需的。
原则上,您不必在Mercurial中命名分支或提交。分支和书签是为修订图 1 提供结构的便利功能。您严格需要的唯一事情是hg update
将修订历史记录移动到另一个提交,然后您可以在修订图中的那一点添加新的提交。
如果你在Git中这样做,你会得到一个“超级HEAD”警告,因为这可能会导致数据丢失,但对于Mercurial来说这不是问题,而关键区别在于:在Git中,你的命令必须保留每个提交都可以从“ref”访问的不变量,这样它就不会被垃圾收集; Mercurial没有垃圾收集,所以这个不变量是无关紧要的,你可以随意移动历史。
1 :命名分支允许您永久地为一组提交命名。书签允许您为分支的提示提供符号名称,这些名称也不是永久性的。