【问题标题】:Merging branches on GitHub created on different locals合并在不同本地创建的 GitHub 上的分支
【发布时间】:2015-06-26 02:25:16
【问题描述】:

我对 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 pull。无论如何,如果您忘记这样做,遥控器将拒绝您的推送,您将不得不git reset --hard您的更改,然后再次执行它们(或者将您的伙伴和git push --force搞砸,这将强行覆盖他们的更改)

标签: git github merge push pull


【解决方案1】:

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

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

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

有3种情况:

  • 分支to-merge 中的所有提交都已经在分支merge-into 中(当您创建一个分支to-merge,进行一些提交,然后合并到merge-intomerge-into 没有获得任何新提交时,就会发生这种情况)。在这种情况下,Git 将执行快进(默认情况下),这意味着不会引入新的提交,但 merge-into 指针将简单地转发到 to-merge 指针所在的位置是。导致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

阅读更多

【讨论】:

  • Git 将执行两个分支 HEAD 的三向合并。这里最好使用小写的“head”。大写的HEAD 通常是指充当“你在这里”标志的符号引用,而不是分支的尖端。
  • @Jubobs 谢谢,已编辑。 (下一次,随意自己进行编辑。最坏的情况,我会回滚;)
猜你喜欢
  • 2017-03-21
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多