Mercurial 变基场景

发布于 2024-10-09 14:44:15 字数 1089 浏览 4 评论 0 原文

我已阅读 RebaseProject 页面并尝试了一个不平凡的示例 (不是对一个完整的分支进行变基)。这与 rebase D 的情况类似 我场景B。

这是变基之前的情况:

default : 0 ----- 2
            \
feature :     1 ----- 3

现在我想在2上变基3,给出:

default : 0 ----- 2 ----- 3
            \
feature :     1

不幸的是,确切的命令是' t 在 RebaseProject 中给出 页面,但从我对用法概要的理解应该是:

hg rebase --source 3 --dest 2

但不知怎的,我的理解一定是有缺陷的,因为我得到了与合并相结合的变基:

default : 0 ----- 2 ----- 3
            \           /
feature :     1 -------

为什么会这样?

重现场景的命令:

hg init
touch a
hg add a
hg commit -m "added a"
hg branch feature
touch b
hg add b
hg commit -m "added b on feature"
hg up -C default
touch c
hg add c
hg commit -m "added c on default"
hg up -C feature
echo "feature" >> a
hg commit -m "changed a on feature"
hg rebase --source 3 --dest 2

I've read the RebaseProject page and tried a non-trivial example
(not rebasing a complete branch). It's similar to the case rebase D on
I
of the scenario B.

Here's the situation before the rebase:

default : 0 ----- 2
            \
feature :     1 ----- 3

Now I'd like to rebase 3 on 2, giving:

default : 0 ----- 2 ----- 3
            \
feature :     1

Unfortunately the exact commands aren't given in the RebaseProject
page, but from my understanding of the usage synopsis it should be:

hg rebase --source 3 --dest 2

But somehow my understanding must be flawed, because I get a rebase combined with a merge:

default : 0 ----- 2 ----- 3
            \           /
feature :     1 -------

Why is that?

Commands to reproduce the scenario:

hg init
touch a
hg add a
hg commit -m "added a"
hg branch feature
touch b
hg add b
hg commit -m "added b on feature"
hg up -C default
touch c
hg add c
hg commit -m "added c on default"
hg up -C feature
echo "feature" >> a
hg commit -m "changed a on feature"
hg rebase --source 3 --dest 2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

挽心 2024-10-16 14:44:15

您的场景看起来与 scenario B 的 rebase G into I 部分非常相似="nofollow noreferrer">Rebase 项目 场景:

场景B
...

最初场景 B
...

将 G 重新设置为 I

将 G 重新设置为 I

在您的场景中,D == <代码>1,<代码>I==<代码>2和<代码>G==<代码>3。变基后,3 保持与 1 的关系,就像 G' 保持与 D 的关系一样。这是因为 D 不是 I 的祖先,并且:

注意:仅当父级是目标的祖先时,Rebase 才会删除父级关系。

您确实想删除这种关系,那么,根据文档,您需要一个开发版本来获取--detach选项:

使用开发版本可以使用新的 --detach 选项来删除此关系。

新--分离选项

Your scenario looks very similar to part rebase G onto I of scenario B of the Rebase Project Scenarios:

Scenario B
...

scenario B originally
...

rebase G onto I

rebase G onto I

In your scenario, D == 1, I == 2 and G == 3. After rebasing, 3 maintains its relationship to 1 just like G' maintained its relationship to D. This is because D is not an ancestor of I and:

Note: Rebase drops a parent relationship only if the parent is an ancestor of target.

You really want to remove that relationship, then, according to the docs, you need a development version to get the --detach option:

Using a development version is available the new --detach option that drops this relationship.

new --detach option

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文