我有一个带有以下分支/标签的Git存储库:
$ git show-ref
8797bba0d098c30fc233c6aba150fd5b925ae8f1 refs/heads/experiment
8797bba0d098c30fc233c6aba150fd5b925ae8f1 refs/heads/master
8797bba0d098c30fc233c6aba150fd5b925ae8f1 refs/remotes/origin/HEAD
f7c967b3e59a922870e5c1b4a9b95e2c98f27086 refs/remotes/origin/develop
8797bba0d098c30fc233c6aba150fd5b925ae8f1 refs/remotes/origin/master
86bebfb80813123268ae5399194ae6e7b79a1b0b refs/remotes/origin/myfeature
f7c967b3e59a922870e5c1b4a9b95e2c98f27086 refs/remotes/origin/snapshot
526db3844560df31a19074a9ab4727f6b2e5acbb refs/tags/cpp.pom-0.0.1
第一个问题:是否可以从原始主分支到达所有上述标记/分支?
第二个问题:当我将这些分支/标签中的一个推送到全新的遥控器时会发生什么?例如:
我创建了一个新的远程/空Git存储库,并在上面包含上述分支/标记的git存储库中添加了一个远程。然后,我只将上述标记: refs / tags / cpp.pom-0.0.1 推送到新的遥控器。结果如下:
如果从主人那里可以到达所有分支/标签,那么我在这里搞砸了什么?例如。将标签/标签推送到尚未推送到新遥控器的某些历史记录中?
答案 0 :(得分:0)
是否可以从原始主分支到达所有上述标记/分支?
嗯,不是直接的,但所有分支至少有一个公共提交,所有提交至少有一个公共(大)父:初始提交。 Git中的分支实际上是指向提交的指针,并且Git中不存在属于历史中特定时间内的分支的提交的概念;如果提交属于其历史的任何部分,则认为它们属于分支。因此,初始提交实际上存在于所有分支中。
当我将这些分支/标签中的一个推送到全新的遥控器时会发生什么?
它将与该分支/标记的整个历史一起存在(但不是所有分支/标记的历史)。
如果从主人那里可以到达所有分支/标签,那么我在这里搞砸了什么?例如。将标签/标签推送到尚未推送到新遥控器的某些历史记录中?
除非你强行推送一些分支(你不应该在共享存储库中做),否则你不能。
旁注:在我看来,你并没有真正在Git中获得分支/标签的概念。它们只是指向特定提交的指针,并且本身不包含任何更改。然后,每个提交都包含对一个或多个父提交的更改和链接,从而创建整个历史记录图。所以你可能没有在存储库中设置特定的分支(或者它可能指向不同的提交)但是你可能仍然有它的提交(并且可以使用它的提交哈希找到它)如果由于它是历史记录的一部分而被推送不同的分支/标签。当Git推送一些分支/标记时,它实际上会推送尚未存在于远程存储库中的该分支/标记历史记录的所有提交,然后将分支/标记指针设置为指向正确的提交。这使它非常强大并且难以打破。