Git 如何在使用远程分支时进行分支

Git 如何在使用远程分支时进行分支,git,Git,我来自Perforce,是Git的新手。我有一个私有的gitlab服务器,并与一个团队合作。我理解Git的基本分支概念,但在同步分支时仍很难找到默认工作流。假设我有以下分支结构 $ git branch -a master remotes/origin/HEAD -> origin/master remotes/origin/feature remotes/origin/my-first-feature 我的第一项功能源自功能。当我现在在本地签出分支时,我是否应该直接处理本地副本并将其推

我来自Perforce,是Git的新手。我有一个私有的gitlab服务器,并与一个团队合作。我理解Git的基本分支概念,但在同步分支时仍很难找到默认工作流。假设我有以下分支结构

$ git branch -a
master
remotes/origin/HEAD -> origin/master
remotes/origin/feature
remotes/origin/my-first-feature
我的第一项功能
源自
功能
。当我现在在本地签出分支时,我是否应该直接处理本地副本并将其推回到服务器上的分支?或者我应该在本地创建另一个分支,它来自
功能

$ git checkout my-first-feature
vi do-i-work-directly-here-and-push-back?

当使用Git时,您在主“功能”分支之外有一个分支是正确的。有些人会将其重命名为develope,然后将其从develope分支中分离出来,作为“我的第一个特性”

您不应该从您的本地分支分支分支,因为如果您拉/更新您的本地“我的第一个功能”分支合并问题将发生

  • 特征分支
  • 创建分支“我的第一个功能”
  • 准备就绪后,将本地推回到“我的第一个功能”分支
  • 在满足所有更改后,与“功能/开发”分支合并

  • 希望这能回答您的问题

    好吧,在git中,换一种方式思考更有用

    Git实际上没有分支。它所拥有的只是大量的提交,这些提交之间有父子关系。提交也可能有两个父级(合并时发生)。不确定是否有超过两位家长,但在实践中还没有看到

    git中的“分支”实际上只是指向提交的指针。它们就像特定提交id的人类可读别名

    然而,按照惯例,有许多命令会自动对它们进行操作。例如,当您提交对分支的一些更改时,git会创建一个新的提交,其父级设置为分支当前指向的提交。然后它更新该分支以指向新提交

    现在,当您克隆存储库时,git不仅复制所有提交,还复制所有分支。但它没有保留它们的名称,而是将它们更改为
    remotes/origin/
    。这同样只是一个惯例——这些分支没有任何特殊之处,它们只是具有特定格式名称的分支

    现在,当您希望在本地使用其中一个分支时,传统要求您首先制作分支的本地副本:
    git checkout-b my first feature--track remotes/origin/my first branch
    。还有一个速记,你可以在文档中找到

    这样做的目的是创建另一个本地分支,并使其指向与远程分支相同的提交。此外,它在新的本地分支机构做了一个记录,上面写着“这个本地分支机构正在跟踪那个远程分支机构”。这意味着当你推拉的时候,我们马上就要开始了。请注意,这仍然是一个本地操作。Git没有联系远程存储库查看其
    my first branch
    指向的位置。它只检查本地
    remotes/origin/my first分支
    分支

    现在,您有了一个新的本地分支机构,您可以根据需要使用它

    当您执行推送操作时,git连接到远程存储库,并尝试使远程
    my first branch
    指向与本地
    my first branch
    相同的提交。为此,它上载所有新提交并尝试更新远程分支指针。如果服务器上有新的提交(在
    我的第一个分支
    中),它将拒绝。它通过检查本地
    my first branch
    指向的提交是否是远程
    my first branch
    指向的提交的后代来检测这一点。如果不是,你就不能推。然后,您需要执行一个pull操作,该操作将获得所有新提交,更新本地
    remotes/origin/my first branch
    以匹配服务器的分支,然后将
    my first commit
    remotes/origin/my first commit
    合并。这将生成一个新的提交,它是远程
    我的第一个分支的后代。现在您可以成功推送

    还有其他一些方法可以使用提交,但是如果您从提交而不是分支的角度来考虑,那么理解所有这些就更容易了。分支只是为了方便起见的别名。提交图才是最重要的

    当我现在在本地签出分支时,我是否应该直接处理本地副本并将其推回到服务器上的分支


    我通常在本地创建功能分支,然后将它们推送到远程repo。但同样有效的做法是,在远程创建分支,然后在本地
    git fetch
    git checkout
    对该分支执行工作。因此,是的,直接在fetched feature分支上工作是一种很好的工作方式。

    谢谢您的回答!有几个
    develope foo
    develope bar
    ,。。。服务器上所有源于
    开发的分支
    ?我们有不同的团队,我希望有不同的分支会很普遍,因为它遵循我们当前的工作流程。对于第(2)点,创建分支“我的第一个功能”,你是指在服务器上还是仅在本地?@DanielStephens第一条评论:通常的做法是让devlop作为第二个“主”分支,然后如你所描述的那样开发foo分支等。第二条评论:在服务器上,尽量不要在本地机器上创建分支。例如,如果您在本地创建了一个分支“foo”,当您将分支推到“developmentfoo”时,有人在服务器上创建了分支“bar”,您将删除分支“bar”的代码。这会导致糟糕的情绪,你可以自由地做任何你想做的事。这就是Git的力量。您应该问(您自己或您的项目经理)的问题是,我们正在使用什么流程来完成开发?答案就是你们必须遵循的。有一些关于分支策略的非常好的信息。这是从我