Mercurial相当于这个git:重命名分支并拉远程分支

时间:2017-03-18 15:46:44

标签: git mercurial

我默认提交了一些我不想要的默认提交。这就是我在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)

这不起作用,我离开了我开始的地方。

2 个答案:

答案 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中,分支提示经常没有子节点,但是分支提示提交不是必需的 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 :命名分支允许您永久地为一组提交命名。书签允许您为分支的提示提供符号名称,这些名称也不是永久性的。