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

Merging branches on GitHub created on different locals

我是 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?

如您所知,我对此有点困惑,希望能提供一些帮助。

您应该首先了解 Git 中的分支是如何完成的。 Git 并不像您想象的那样真正有分支的概念。 Git "branch" 实际上只是指向提交的指针。

"branch"想的,其实是通过chaining top commit(称为分支的HEAD,分支指针指向的地方),一路往下实现到初始提交。

当您合并两个分支时,Git 将对两个分支头进行三向合并,并在您要合并的分支上创建一个 new 提交将 合并到 ,以及您要合并的分支中的更改。

有3个案例:

  • 分支 to-merge 中的所有提交都已经在分支 merge-into 中(当您创建分支 to-merge、进行一些提交并合并到 [=11 时会发生这种情况=] 没有 merge-into 获得任何新的提交)。在这种情况下,Git 将执行快进(默认情况下),这意味着不会引入新的提交,但 merge-into 指针将简单地转发到 to-merge 指针所在的位置。导致 to-merge 中的所有提交现在也都在 merge-into 上。您可以使用 git merge --no-ff 标志覆盖此选项。
  • 两个分支都有提交,但是分支 to-merge 中的更改 none 与分支 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.

阅读更多