合并后 git 个分支可以不同吗?

Can git branches be different after a merge?

我用 git 和 github 做了一些工作,但得到了意想不到的结果。在一个分支上工作了几个月后,我将它合并回主服务器上,但是在 github compare 上告诉我分支是相同的,文件实际上是不同的。这让我发疯所以这是我的问题:

  1. 分支 B 从分支 A 分叉出来
  2. 工作完成并推送到分支 A(提交、合并、重置……)
  3. 工作完成并推送到分支 B(提交、合并、重置……)
  4. 将 B 合并到 A

合并后两个分支都修改了吗?
是否有可能分支 A 和 B 文件在步骤 4 后不相同?
如果是,是什么行为让他们与众不同?

谢谢

当您将 B 合并到 A 中时,只会修改分支 A。它会将 B 中的任何更改(自分叉后)应用到 A 中。合并后分支 B 保持不变。这是预期的行为。

通常,如果您在个人 "feature branch" 上完成工作并将其合并到主分支或共享分支中,您现在可以删除功能分支。

在git中,分支实际上只是对单个提交的引用。两个分支可以引用相同的提交,这将使它们相同,但是在您的情况下,它们必须引用相同的提交。

假设这是您的示例中步骤 3 之后两个分支的当前状态。 "A" 和 "B" 是 A 和 B 被标记为

的提交
A B
↑ ↑
o o
↑↗
o
↑
o

到目前为止,此图中的每个提交都有一个父项。每次在分支中创建新提交时,都会创建一个新提交作为当前提交的子项,并且分支会更改为引用此新提交。

当您在 git 中合并时,您创建了一个合并提交,这是一个具有多个父项的特殊提交,每个父项都有不同的更改。

当您 运行 git merge 时,将创建此合并提交,并且只有您当前签出的分支才会向前移动以引用此新提交。这是当您 运行 git merge B 分支 A 签出时会发生的情况(示例中的第 4 步):

A
↑↖
o B
↑ ↑
o o
↑↗
o
↑
o

正如你在这里看到的,分支 B 根本没有改变,而分支 A 现在指的是新的合并提交。

您的文件在合并提交中的状态可以是任何东西,但是 运行ning git merge 通常会尝试包含来自两个分支的更改的组合,因为它们是不同的。