合并后 git 个分支可以不同吗?
Can git branches be different after a merge?
我用 git 和 github 做了一些工作,但得到了意想不到的结果。在一个分支上工作了几个月后,我将它合并回主服务器上,但是在 github compare 上告诉我分支是相同的,文件实际上是不同的。这让我发疯所以这是我的问题:
- 分支 B 从分支 A 分叉出来
- 工作完成并推送到分支 A(提交、合并、重置……)
- 工作完成并推送到分支 B(提交、合并、重置……)
- 将 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
通常会尝试包含来自两个分支的更改的组合,因为它们是不同的。
我用 git 和 github 做了一些工作,但得到了意想不到的结果。在一个分支上工作了几个月后,我将它合并回主服务器上,但是在 github compare 上告诉我分支是相同的,文件实际上是不同的。这让我发疯所以这是我的问题:
- 分支 B 从分支 A 分叉出来
- 工作完成并推送到分支 A(提交、合并、重置……)
- 工作完成并推送到分支 B(提交、合并、重置……)
- 将 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
通常会尝试包含来自两个分支的更改的组合,因为它们是不同的。