在不同的本地人上创建的GitHub上合并分支

时间:2015-04-19 12:06:08

标签: git github merge push pull

我对Git很新,我正在努力了解它的工作流程。我遇到了一个我不知道如何完成我想做的事情的情况,并且很高兴有人解释发生了什么,更重要的是为什么。

场景是这样的:我正在与另一个人合作开展一个项目。该项目由不同的独立子项目组成。我们的想法是,我们将自己处理不同的子项目,并逐步将这些子项目的结果添加到主项目中。

为了管理这个,我们在GitHub上创建了一个包含信息A的共享存储库。我们都将该存储库克隆到本地计算机上。我在本地创建了一个新的分支来处理子项目B,他对子项目C做了同样的事情。最后我们只想在GitHub上有一个包含所有信息A + B + C的分支。

有哪些不同的方法可以实现这一目标?我无法理解的是我如何将我的工作B推入GitHub而不做任何改变(比如删除)他已经放在那里的工作C.如果他在本地将A和C合并到A + C中,将其推送到GitHub会发生什么,然后我对A + B执行相同的操作;那么GitHub上的C会发生什么?最好找到一种方法将B和C的单独分支推入GitHub,并将A,B和C合并到A + B + C中吗?

正如你所知道的那样,我对此感到有些困惑,并希望得到一些帮助。

1 个答案:

答案 0 :(得分:2)

您应该首先了解如何在Git中完成分支。 Git并没有像你想象的那样拥有分支的概念。 Git“branch”实际上只是指向提交的指针。

您想到的“分支”实际上是通过链接顶级提交(称为分支指针指向的分支的HEAD),一直到初始提交来实现的。

当您合并两个分支时,Git将执行两个分支头的三向合并,并在您将合并到的分支上创建 new 提交,你正在合并分支机构的变化。

有3例:

  • 分支to-merge中的所有提交都已在分支merge-into中(当您创建分支to-merge,进行一些提交并合并到merge-into时会发生这种情况)没有merge-into获得任何新的提交。在这种情况下, Git 将执行快进(默认情况下),这意味着不会引入新的提交,但merge-into指针将简单地转发到to-merge指针的位置1}}指针是。导致to-merge中的所有提交现在都在merge-into上。您可以使用git merge --no-ff标记覆盖此选项。
  • 两个分支都有提交,但分支to-merge中没有任何更改与分支merge-into中的更改重叠,在这种情况下,Git将使用两个分支的合并结果创建新提交。没有麻烦,没有问题。
  • 两个分支都有提交,和一些更改重叠。在这种情况下,Git将拒绝合并,并会要求您解决冲突。 Git会使用特殊标记在您的文件中标记冲突,并在完成后要求您git add该文件,并commit完成合并。

所以在你的情况下,我怀疑会发生的是:

  1. 分支机构A尚未开发。您可以从中创建分支B和C.
  2. 分支B有你要合并回A的工作。执行git pull origin A获取最新的更改(在合并之前总是这样做),然后git checkout A; git merge B。可能发生的是快进,因为A没有收到任何提交。
  3. 分支C现在有你想要合并回A的工作。执行git pull origin A以获取最新的更改( 在合并之前总是这样做 )然后是git checkout A; git merge C。将要发生的事情是使用合并进行新的提交(您可以git push origin A返回到远程),或者它会告诉您存在需要解决的冲突。在这种情况下,请解析,git add文件,然后commitpush
  4. 了解更多