将标记/分支推送到Git中的新远程服务器?

将标记/分支推送到Git中的新远程服务器?,git,Git,我有一个具有以下分支/标记的Git存储库: $ git show-ref 8797bba0d098c30fc233c6aba150fd5b925ae8f1 refs/heads/experiment 8797bba0d098c30fc233c6aba150fd5b925ae8f1 refs/heads/master 8797bba0d098c30fc233c6aba150fd5b925ae8f1 refs/remotes/origin/HEAD f7c967b3e59a922870e5c1b4a

我有一个具有以下分支/标记的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推送到新的遥控器。结果如下:

如果所有的分支/标签都能从主人那里找到,我就不能把这里搞砸了吗?例如,将标签/标签推送到一些尚未推送到新遥控器的历史记录

可以从原始主分支访问上述所有标签/分支吗

不是直接的,但是所有分支都至少有一个公共提交,并且所有提交都至少有一个公共祖父母:初始提交。Git中的分支实际上是一个指向提交的指针,而在历史上特定时间属于分支的提交的概念在Git中并不存在;如果提交位于分支历史记录的任何部分,则将其视为属于分支。因此,初始提交实际上存在于所有分支中

当我将这些分支/标签中的一个推送到一个全新的遥控器时会发生什么

它将与该分支/标记的整个历史记录一起出现,而不是所有分支/标记的历史记录

如果所有的分支/标签都能从主人那里找到,我就不能把这里搞砸了吗?例如,将标签/标签推送到一些尚未推送到新遥控器的历史记录

除非强制推送某些不应在共享存储库中执行的分支,否则不行


旁注:在我看来,在Git中,您似乎没有真正理解分支/标记的概念。它们只是指向特定提交的指针,本身不包含任何更改。然后,每个提交都包含对一个或多个父提交的更改和链接,从而创建整个历史图。因此,您可能没有在存储库中设置特定的分支,或者它可能指向不同的提交,但是您可能仍然在那里有它的提交,并且如果由于它是不同分支/标记的历史记录的一部分而被推送,则可以使用它的提交哈希来找到它。当Git推送某个分支/标记时,它实际上推送该分支/标记历史中尚未在远程存储库中的所有提交,然后将分支/标记指针设置为指向正确的提交。这使得它非常健壮,很难被打破。

好的,我不明白您对我的第一个问题的回答:-假设只有一个远程调用origin default。如果我追溯每个分支/标记的时间,我将根据Git图中的分支/指针/标签的定义最终在主分支上的初始提交中结束,对吗?对不起,我最初混合了答案原始分支和原始存储库;我已经更新了答案。我的意思是,是否可以访问主分支上任何给定节点/提交的所有提交/节点/标记/分支?例如,是否可以在git图上运行深度优先搜索DFS或广度优先搜索BFS?否,只能访问父提交,父级与子级之间没有引用。