2017-03-15 64 views
-1

我做了一些与git和github的工作,但有意想不到的结果。在一个分支上工作了几个月后,我把它重新合并到master上,但是在github比较中告诉我这些分支是相同的,而这些文件实际上并不相同。这是推动我疯了所以这里是我的问题:合并后git分支可以不同吗?

  1. 从分支分行A派生一个
  2. 完成工作和分支推送(提交,合并,重置,...)
  3. 完成工作推分支B(提交,合并,重置,...)
  4. 合并B插入一个

两个分支修改合并后?
步骤4之后分支A和B文件可能不相同吗?
如果是,采取了哪些措施使它们不同?

感谢

+1

这是一个诡计问题吗? A现在有A + B的变化,而B只有B,对吗? – mustaccio

+0

不是一个诡计的问题,但我想这不是一个非常聪明的问题......如果我将B合并到A中,但是我想继续使用B从其他提交中接收到的提交A? – Riccardo

回答

1

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

假设这是您的示例中步骤3后两个分支的当前状态。 “A”和“B”是其中A和B的标签对

A B 
↑ ↑ 
o o 
↑↗ 
o 
↑ 
o 

在该图中的每个提交迄今具有单个父的提交。每次在分支中创建一个新的提交时,都将新提交作为当前提交的子提交,并且更改分支以引用此新提交。

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

当您运行git merge时,会创建此合并提交,并且只有您当前签出的分支将被向前移动以引用此新提交。这里是当你有分行A签出(在你的榜样步骤4)当您运行git merge B会发生什么:

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

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

您的文件在合并提交中的状态可能是任何事情,但运行git merge通常会尝试包含两个分支的更改的组合,因为它们发散。

1

当合并B插入A,只有修改分支A.它适用B中到A.分行A的任何变化(由于叉)由合并保持不变。这是预期的行为。

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