本地分支机构出现在GitHub';s";“网络”;看法

本地分支机构出现在GitHub';s";“网络”;看法,git,version-control,workflow,github,dvcs,Git,Version Control,Workflow,Github,Dvcs,我们正在使用Git,我们的工作流由一个“dev”和“master”分支组成,它们位于GitHub和每个开发人员的本地存储库上。没有直接在“master”或“dev”上执行任何工作,而是在本地分支上执行,并且只在“dev”上以及以后与“master”进行合并。我们不会将本地分支机构推送到GitHub 出于某种原因,开发人员的本地分支显示在GitHub上的“网络”视图中,这会使网络图变得混乱(我应该指出,分支本身并不存在于GitHub上的分支列表下) 我的问题是,这是否是正常行为,是否会自动发生,以

我们正在使用Git,我们的工作流由一个“dev”和“master”分支组成,它们位于GitHub和每个开发人员的本地存储库上。没有直接在“master”或“dev”上执行任何工作,而是在本地分支上执行,并且只在“dev”上以及以后与“master”进行合并。我们不会将本地分支机构推送到GitHub

出于某种原因,开发人员的本地分支显示在GitHub上的“网络”视图中,这会使网络图变得混乱(我应该指出,分支本身并不存在于GitHub上的分支列表下)


我的问题是,这是否是正常行为,是否会自动发生,以显示对“dev”和“master”的更改来自何处,还是因为有人错误地推送了一个本地分支,然后将其删除?如果是后者,有没有办法清理混乱?

本地分支不应该出现在github上,没有。除非有人说

git push origin branch_name
origin(在本例中为github)无法了解分支

如果分支不再作为本地分支存在,则可以通过以下方式将其从源位置删除:

git push origin :branch_name

您在“网络”视图中看到的工件可能是基于合并的工作流的痕迹

当合并操作导致合并提交*(即,它不是“快进”)时,存储库的历史模型将包括表示两个分支的部分。推送非本地分支时,其祖先将包括最初在本地分支上进行的提交。
*要么使用
gitmerge--no ff
,要么因为两个分支都超出了它们的合并基础

考虑假设的一系列事件以及中央存储库中生成的历史记录DAG+REF:

A$ git fetch && git checkout -b foo central/dev
# A works and commits to her local branch
B$ git fetch && git checkout -b bar central/dev
# A and B work and commit to their local branches
A$ git checkout dev && git pull &&
   git merge --no-ff foo && git push central dev
# B works and commits to his local branch
C$ git fetch && git checkout -b quux central/dev
# B and C work and commit to their local branches
B$ git checkout dev && git pull &&
   git merge --no-ff bar && git push central dev
C$ git checkout dev && git pull &&
   git merge --no-ff quux && git push central dev
D$ git fetch && 
   git checkout master && git pull &&
   git merge --no-ff dev && git push central master

---o---o-------------------------------D  master
        \                             /
         \             o---o---o     /      (was quux in C's local repository)
          \   o---o   /         \   /       (was foo in A's local repository)
           \ /     \ /           \ /
            o-------A---------B---C       dev
             \               /
              o---o----o----o               (was bar in B's local repository)
本地(foo、bar、qux)分支从未直接推送到中央存储库。但是,“它们的”提交由推送到中央存储库中的开发分支(以及稍后推送到主分支)的合并提交引用

我怀疑GitHub网络视图正在向您显示这些间接推送的分支

如果要消除分支的拓扑证据,则需要移动到基于重基操作而不是合并操作的工作流(这意味着本地分支的原始“分叉点”将被丢弃,这可能对整个工作流很重要,也可能不重要)


不要陷入试图让DAG看起来“漂亮”的困境。工具不在乎DAG是否“丑陋”,你也不应该。您应该集中精力选择并正确使用分支工作流,该工作流生成一个DAG,让工具为您做有用的工作。

正如我提到的,分支本身在origin(GitHub)上不存在,但它的效果可以在GitHub的“网络”中看到github无法进入您的开发人员机器并查看您在那里得到了什么-如果它在网络视图中,那么在某个点上它一定被推到了github中。网络视图中有大量缓存,因此显示的标记/分支可能已过时?尽管考虑到这一点,您确定这是一个分支而不是标记吗?
git-tag
output是什么?到目前为止,任何分支上都没有标记,所以我猜(正如您所提到的)在某个点上本地分支已经被推送,后来被删除。