Mercurial等价于此git:重命名分支并拉远程分支

Mercurial等价于此git:重命名分支并拉远程分支,git,mercurial,Git,Mercurial,我在默认情况下做了一些我不想在默认情况下做的承诺。这是我在git中要做的,mercurial的等价物是什么 git branch -m not_default git checkout osrf/default git checkout -b default 以下是我尝试过的(但失败了) 这不起作用,我被留在了开始的地方。在hg help branch的顶部附近,您将看到以下文本: 注: 分支名称是永久的和全局的。使用hg bookmark创建一个 而不是重量轻的书签。有关更多信息,请参见hg

我在默认情况下做了一些我不想在默认情况下做的承诺。这是我在git中要做的,mercurial的等价物是什么

git branch -m not_default
git checkout osrf/default
git checkout -b default
以下是我尝试过的(但失败了)


这不起作用,我被留在了开始的地方。

hg help branch
的顶部附近,您将看到以下文本:

注:
    分支名称是永久的和全局的。使用
    hg bookmark
    创建一个 而不是重量轻的书签。有关更多信息,请参见hg帮助词汇表 有关命名分支和书签的信息。

因此,虽然您可以更改将与新提交关联的名称,包括为新提交提供以前从未出现过的分支名称,从而创建新分支,但您永远不能更改现有提交的分支名称编辑:,通常不需要在Mercurial中执行此操作。Mercurial断言您永远不需要这样做,只是不允许这样做

这与Git非常不同,Git的“分支”(分支名称)更像Mercurial书签编辑:Git中的提交同时位于多个分支上,每个分支名称用于标识这样命名的分支的提示提交1,可访问性确定哪些提交包含在哪些分支中。(但是,如果包含Git提交的分支数量降至零,则提交可能容易受到垃圾收集的攻击,这取决于它是否具有可用于查找它的非分支名称。)Mercurial中的提交始终只在一个分支上。一个分支总是有一个名称

(从技术上讲,可以通过复制Mercurial存储库并使用重新映射分支名称来重命名分支。但我没有测试过这一点。)



1Tip commit是一个Git概念,它没有到Mercurial的一对一映射。Mercurial头是一个没有子级的提交,在Git中,分支提示通常没有子级,但分支提示提交不需要没有子级。在Mercurial和Git中,当当前提交为X时创建新提交会创建X的新子级,但在Git中,无论您“在”哪个分支上,如果您在任何分支上,该分支的名称都会被重写以指向新提交,因为它是新的并且现在没有孩子,所以它相当于一个水银头。

hg help branch
的顶部附近,您将看到以下文本:

注:
    分支名称是永久的和全局的。使用
    hg bookmark
    创建一个 而不是重量轻的书签。有关更多信息,请参见hg帮助词汇表 有关命名分支和书签的信息。

因此,虽然您可以更改将与新提交关联的名称,包括为新提交提供以前从未出现过的分支名称,从而创建新分支,但您永远不能更改现有提交的分支名称编辑:,通常不需要在Mercurial中执行此操作。Mercurial断言您永远不需要这样做,只是不允许这样做

这与Git非常不同,Git的“分支”(分支名称)更像Mercurial书签编辑:Git中的提交同时位于多个分支上,每个分支名称用于标识这样命名的分支的提示提交1,可访问性确定哪些提交包含在哪些分支中。(但是,如果包含Git提交的分支数量降至零,则提交可能容易受到垃圾收集的攻击,这取决于它是否具有可用于查找它的非分支名称。)Mercurial中的提交始终只在一个分支上。一个分支总是有一个名称

(从技术上讲,可以通过复制Mercurial存储库并使用重新映射分支名称来重命名分支。但我没有测试过这一点。)



1Tip commit是一个Git概念,它没有到Mercurial的一对一映射。Mercurial头是一个没有子级的提交,在Git中,分支提示通常没有子级,但分支提示提交不需要没有子级。在Mercurial和Git中,当当前提交为X时创建新提交会创建X的新子级,但在Git中,无论您“在”哪个分支上,如果您在任何分支上,该分支的名称都会被重写以指向新提交,因为它是新的,而且现在没有孩子,这就相当于一个易变的脑袋。

你什么都不用做。Mercurial的分支模型与Git完全不同

Git不仅需要分支名称来命名分支,还需要使它们保持活动状态(这样它们就不会被垃圾收集)

在Mercurial中,您可以返回到原始提交,在那里执行
hg update
,然后在该点进行下一次提交。这将使您的新提交成为一个“匿名分支”(请参阅
hg help glossary
)。从那里,额外的提交将在一个新的匿名分支上进行

您可以使用书签(
hg help bookmark
)以类似Git的方式为分支的提示命名,但严格来说,这不是必需的


原则上,您不必在Mercurial中命名分支或提交。分支和书签是为修订图1提供结构的方便功能。您唯一严格需要的是
hg update
在修订历史中移动到不同的提交,然后您可以在修订图的该点添加新的提交

如果在Git中这样做,您将得到一个“detached HEAD”警告,因为这可能会导致数据丢失,但对于Mercurial来说这不是问题,这就是关键区别所在:在Git中,您的命令必须保持不变,即每个提交都可以从“ref”访问,这样它就不会被垃圾收集;Mercurial没有垃圾收集,所以这个不变量与
hg branch -m not_default (default still exists after this)
hg pull -b default osrf (says no changes)
hg update default (does nothing)