我已经从两个遥控器中提取了,并且想知道哪些提交/分支来自远程调用default
,哪些提交/分支来自远程调用upstream
。我如何在 Hg 中实现这一目标?
一般来说,你不能。(但见下文,以及Lazy Badger 的建议扩展。)
Git实际上也没有这样做。尽管如此,正如您所说,您可以:
...使用 git log --describe --all 命令...
这不会告诉您谁将提交提交给您。相反,它会告诉您哪些引用与要描述的提交“最接近”(“最接近”以模糊的 handwave-y 方式定义)。Git 所做的,而 Mercurial 没有,是在您的存储库中创建特定的引用 - 远程跟踪名称,例如remote1/branch
和remote2/branch
- 记住哪个提交分别由branch
remote1 和 remote2 上的名称标识。
如果两个遥控器中的一个恰好首先具有这些提交,那么只有一个这样的引用可以是“最接近的”。Git 会选择那个,你可以从中推断出谁有提交,谁没有。如果两个遥控器都有提交,它会失败,或者可能会失败:你得到一个任意的引用(这可能就足够了,这取决于你的潜在目标)。
现在,你可以做点什么了。具体来说,在这种情况下的问题是 Mercurial 的分支名称是全局的,并且提交永久地粘在它们所在的分支上。如果您连接到 remote1 并收到一些提交,它们具有任何哈希 ID 和分支名称,并且您的 Mercurial 将它们存储在您的存储库中,使用相同的哈希 ID 并使用相同的名称——现在 Mercurial(如 Git)忘记了源,因为这些现在是你的提交。
但是您确实知道,刚刚进来的任何提交(如果有的话)都来自 remote1,而不是 remote2。此外,如果确实有任何提交,它们将增加本地修订 ID 号 ( -r -n tip
)。您可以在某处保存该新数字,甚至是整个跨度。 在该范围内的所有这些提交,“旧提示 + 1”到“新提示”(包括)都来自 remote1。
对 remote2 重复此操作:到达的任何新提交都来自它们。
(还有另一种选择,但它很激烈:您可以使用 Convert 扩展来更改提交的分支名称。但是,如果您这样做,您将被困在另一个分支上的那些提交:您将拥有复制(即移植或变基)提交,以便稍后将它们移动到其原始分支,如果您愿意的话。还有其他更好的扩展,但与 Convert 不同,它们不随 Mercurial 分发。)