我对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中吗?
正如你所知道的那样,我对此感到有些困惑,并希望得到一些帮助。
答案 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 add
该文件,并commit
完成合并。所以在你的情况下,我怀疑会发生的是:
git pull origin A
获取最新的更改(在合并之前总是这样做),然后git checkout A; git merge B
。可能发生的是快进,因为A没有收到任何提交。git pull origin A
以获取最新的更改( 在合并之前总是这样做 )然后是git checkout A; git merge C
。将要发生的事情是使用合并进行新的提交(您可以git push origin A
返回到远程),或者它会告诉您存在需要解决的冲突。在这种情况下,请解析,git add
文件,然后commit
和push
。