合并后git分支会有所不同吗?

时间:2017-03-15 17:12:31

标签: git github merge branch git-merge

我用git和github做了一些工作,但结果出乎意料。经过几个月的分支工作,我把它合并回主人,但在github比较告诉我,分支是相同的文件实际上是不是。这让我很生气,所以我的问题在这里:

  1. 来自分支A的分支B分叉
  2. 工作完成并推送到分支A(提交,合并,重置......)
  3. 工作完成并推送到分支B(提交,合并,重置......)
  4. 将B合并为A
  5. 合并后两个分支都被修改了?
    在步骤4之后,分支A和B文件是否可能不相同?
    如果是,那么哪些行动会有所不同?

    由于

2 个答案:

答案 0 :(得分:1)

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

通常,如果您已完成个人“功能分支”的工作并将其合并到主分支或共享分支中,则现在可以删除功能分支。

答案 1 :(得分:1)

在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现在指的是新的合并提交。

合并提交中的文件状态可能是任何内容,但正常运行git merge会尝试包含两个分支的更改组合,因为它们已经分歧。