Git在远程显示两个分支

时间:2015-05-13 08:10:25

标签: git

我克隆了一个git repo并使用git checkout -b A创建了一个分支A.之后,我做了一些更改并在分支A中提交并使用

将其推送到远程分支
    git push -u origin/A

与此同时,我删除了我当地的工作区。现在我必须在A中进行更改。所以我再次克隆了回购。现在我有两个分支来源/ A和A. 我应该

     git checkout A 
       (or)
     git checkout -b branchname origin/A  

问题:    1)为什么两个同名的分支都相同?

2 个答案:

答案 0 :(得分:1)

origin / A是远程,A是您的本地,因此如果远程或本地不是最新的,它们可以是不同的。但是你不需要再次克隆来获得分支,你只需要做git fetch --all

答案 1 :(得分:1)

在这里选择 branch 这个词可能很糟糕。您可能会说它是参考点:它是对提交图中提交的引用。

原因是origin 分布式:每个对等方都存储提交图的(部分)。无法保证您机器上的图形与远程计算机上的图形(master abc----ghi---mno \ \ \ \ A def----jkl )完全相同,也不能保证在项目上协作的朋友的机器上也是如此。

例如,本地图可能如下所示:

master

这意味着有两个指针mno指向Ajkl指向master abc----ghi---mno \ \ A def 。现在遥控器最近无法更新,只包含:

xyz

另一位开发人员也可能在遥控器中创建了贡献master abc----ghi---mno \ \ A def---xyz ,从而产生了一个图表:

master    abc----ghi---mno
             \      \
              \      \
A              def----jkl
                  \
                   \
origin/A            xyz

在这种情况下,联盟看起来像:

origin/A

在这种情况下,def指向Ajkl指向git checkout

如果遥控器与本地存储库完全同步,那么两者都是相同的

checkout A 表示您正在设置活动分支,这意味着项目的活动状态现在切换到引用指向的位置。如果这样做jkl,系统将修改文件,使其看起来像存储在提交jkl中的状态,此外git checkout -b B A将被标记为"当前"状态。

如果您要运行origin/A(请注意,而不是A)。您只需创建一个新分支。从现在开始,Bjkl都指向master abc----ghi---mno \ \ \ \ def----jkl / | <A> | / <B> 。因此:

git checkout -b B A

如果您运行origin:并且如master abc----ghi---mno \ \ \ \ def----jkl / / <B> <A> 未完全同步(或进一步同步)之前所述,则会导致:

git fetch --all

您可以运行git pull --all origin或{{1}}来同步图表。