1

出于隐私原因,我已经编辑了下面的图片,但基本上我有两个分支,我试图在同一个提交中获得。带有标签 4.3.1.11 的提交与带有标签 4.3.1.13 的提交位于不同的分支上。我尝试将 4.3.1.11 合并到 4.3.1.13 中,但没有任何变化。

我只是想在同一个提交上获得两个分支。

我该怎么做呢。我知道有人问过类似的问题,但我没有看到像我这样的情况已经得到回答。

在此处输入图像描述

4

3 回答 3

0

合并和提交这两个术语可能会产生混淆。在 git 中,一次提交只是一个增量,介于 2 次上下文更改之间。Merge 是一个象征性的提交,它代表一个单一的实体,它结合了 2 个父级的分支。

这与 SVN 等修订系统不同,其中合并实际上是一件事。在 git 中,将其视为一种策略更安全。

因此,如果您在 repo A 中有一个点和另一个点 B,它们将通过某种路径相互连接(除非它们位于 2 个单独的孤立分支上)。在告诉 git 创建一个点 C 时,它可以被认为是分支 A 或 B 的扩展,但它是 A 到 B 或 B 到 A 的符号合并,git 将考虑路径上的所有差异,返回向上查找 A 和 B 的父辈,直到找到共享父辈。

因此,如果 OA 和 OB 创建 OAC 的路径(其中 C 是您的合并)将 BOA 视为路径。

这很令人困惑,因为您可能将 OB 视为要合并的内容,而忘记了 OA。但这是合乎逻辑的。

在您的示例中,如果 4.3.1.11 是 A,origin/develop 是 B,4.3.1.13 是 G,您可以看到您的分支树只是 ABCDEFG。所以要从 A 到 G,你只需沿着树前进(你可以快进)。

换句话说,G 已经包含 A,它只是已经应用了增量 BG,所以很明显,策略的净效果是 git 说“无事可做”。

在您的示例中 4.3.1.11 和 4.3.1.13 是标签,因此根据定义不应移动。正如您在答案中评论的那样,您可以使用git branch -f将分支指针移动到新提交,但这不是合并。您还可以使用git revert删除提交(它要求 git 创建反向提交,并将其添加到链中)

于 2016-04-27T14:46:18.380 回答
0

您只需合并 2 个分支的更改。

# Checkout the branch you want to merge the code into
git checkout branchA

# now merge the code form the other branch into this branch:
git merge branchB

现在 branchB 也将包含分支 A 的所有代码。

于 2016-03-31T02:41:08.170 回答
0

要将分支的指针移动到不同的提交,只需使用:

git branch -f <branch name> <commit number>

来自:Git:将分支指针移动到不同的提交而不签出

于 2016-03-31T13:52:49.630 回答